Android学习——写个小实例

学了不少基础的知识,拼一个完整点的小例子吧!

目标:完成一个与PC机互发消息的聊天程序。

 

首先要先试通,通讯机制。在多机互联中最常用的是网络,而网络编程中,底层的通讯机制也就是Socket。我们就想试一试用Socket来实现双机对联。先试通Socket通讯,PC机当服务器,手机当客户端。

通常,我们写PCSocket程序时,了解到,服务器端是采用Socket监听程序来监听网络的某个端口,当客户端连入时,服务器监听程序返回一个Socket对象来收发消息。客户端要连接到服务器端时,需要知道对方的IP和端口。在本实例中,服务器端我们采用C#来实现。

 

C#服务端

l  监听服务:

IPAddress ip = IPAddress.Parse("127.0.0.1");

myList = new TcpListener(ip,8001); //8001为端口号

myList.Start();

l  开始监听:

TcpClient client = myList.AcceptTcpClient(); //程序将会卡住,是同步执行不是异步。一旦客户端接入时,创建对象,继续执行。

l  发送消息:

StreamWriter writer = new StreamWriter(client.GetStream());

writer.Write(Context + (char)13 + (char)10);

writer.Flush();

注意:在发送的消息内容中,结尾必须要加上回车换行。如是不加,Android中接收会出错(会报Bad package)。具体原来我也不清楚L

l  接收消息:

byte[] readBuffer = new byte[read_BUFFER_SIZE];

this.client.GetStream().BeginRead(readBuffer, 0, read_BUFFER_SIZE, new AsyncCallback(StreamReceiver), null);

int BytesRead = client.GetStream().EndRead(ar);

retString= Encoding.ASCII.GetString(readBuffer, 0, BytesRead - 1);

 

Android客户端

l  连接服务

Socket socket = new Socket("10.0.2.2", 8001);

在模拟器中,连接到PC端采用的IP"10.0.2.2",端口用服务器端监听的端口。

l  发送消息

DataOutputStream dos=new DataOutputStream(socket.getOutputStream());

dos.write(str.getBytes());

l  接收消息

BufferedReader mReader = new BufferedReader(new InputStreamReader(socket.getInputStream(), "UTF-8"),8192);

String strRet = mReader.readLine(); //同样,执行读时,程序也会卡住,等待信息。

l  断开连接

socket.shutdownInput();         //需要调此方法,不然mReader.readLine还傻傻挂着。

socket.shutdownOutput();

socket.close();

 

在编写通讯程序时,由于读消息都是同步的,所以一般我们会采用线程来处理。

这章就写到这里,简单的通讯也就跑起来了,下次再把界面整得好看一点。

 

 

实例下载:MyTalk.rar

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
60个Android开发精典案例 Android软件源码: 2-1(Activity生命周期) 3-1(Button与点击监听器) 3-10-1(列表之ArrayAdapter适配) 3-10-2(列表之SimpleAdapter适配) 3-11(Dialog对话框) 3-12-5(Activity跳转与操作) 3-12-6(横竖屏切换处理) 3-3(ImageButton图片按钮) 3-4(EditText文本编辑) 3-5(CheckBox与监听) 3-6(RadioButton与监听) 3-7(ProgressBar进度条) 3-8(SeekBar 拖动条) 3-9(Tab分页式菜单) 4-10(可视区域) 4-11-1(Animation动画) 4-11-2-1(动态位图) 4-11-2-2(帧动画) 4-11-2-3(剪切图动画) 4-13(操作游戏主角) 4-14-1(矩形碰撞) 4-14-2(圆形碰撞) 4-14-4(多矩形碰撞) 4-14-5(Region碰撞检测) 4-15-1(MediaPlayer音乐) 4-15-2(SoundPool音效) 4-16-1(游戏保存之SharedPreference) 4-16-2(游戏保存之Stream) 4-3(View游戏框架) 4-4(SurfaceView游戏框架) 4-7-1(贝塞尔曲线) 4-7-2(Canvas画布) 4-8(Paint画笔) 4-9(Bitmap位图渲染与操作) 5-1(飞行射击游戏实战) 6-1(360°平滑游戏摇杆) 6-10-1(Socket协议) 6-10-2(Http协议) 6-11(本地化与国际化) 6-2(多触点缩放位图) 6-3(触屏手势识别) 6-4(加速度传感器) 6-5(9patch工具)] 6-6(截屏) 6-8(游戏视图与系统组件) 6-9(蓝牙对战游戏) 7-10-1(遍历Body) 7-10-2(Body的m_userData) 7-11(为Body施加力) 7-12(Body碰撞监听) 7-13-1(距离关节) 7-13-2(旋转关节) 7-13-3(齿轮关节) 7-13-4(滑轮关节) 7-13-5-1(通过移动关节移动Body) 7-13-5-2(通过移动关节绑定两个Body动作) 7-13-6(鼠标关节-拖拽Body) 7-14(AABB获取Body) 7-4(Box2d物理世界) 7-5在物理世界中添加矩形) 7-7(添加自定义多边形) 7-9(在物理世界中添加圆形) 8-1(迷宫小球) 8-2(堆房子)

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值