Android socket编程 以非阻塞I/O服务器及Service为例
2010-08-22 04:49:00 来源:WEB开发网核心提示:之前采用聊天敲门的方式来介绍Socket通信,有两个不足的地方,Android socket编程 以非阻塞I/O服务器及Service为例,1.服务器会造成IO的阻塞即服务器一旦执行server.accept();将一直处于阻塞状态,直到有客户端请求连接,之后,Dos终端也进行连接,2.服务器端没有建立用户列表,无法将
之前采用聊天敲门的方式来介绍Socket通信,有两个不足的地方,
1.服务器会造成IO的阻塞
即服务器一旦执行server.accept();
将一直处于阻塞状态,直到有客户端请求连接。
2.服务器端没有建立用户列表,无法将某一客户端发送的消息广播给所有正在连接的客户端。
就好象是一个人自说自话,自己发送给客户端,自己接收服务器返回的消息。
基于以上两点,我改进了我的程序。
服务器端的改进:
1.通过采用socketchannel的非阻塞方式进行通信
2.建立Userlist客户端的哈希表,存储 已连接客户端的 ip地址和 服务器为其分发的socketchannel
客户端的改进:
1.采用Service 与服务器端进行连接,发送数据,实时监听服务器返回的数据。
流程图:
需要改进的地方
服务器端:
1.当一个客户端断开连接以后,另一个客户端在收到消息之前也断开连接,而此时服务器正在向客户端发送消息,
因此,服务器的Thread.sleep时间不能太长,但也不能太短,因为考虑到服务器的负荷问题。
2.服务器容错处理机制需要改进。
客户端:
1.将Notificationbar改为其他更为直观方式刷新显示。
2.容错处理机制的处理。
下面是效果图:
服务器端:
dos客户端:
Android客户端:
效果图的意思是,Android的客户端通过绑定Service与服务器端进行了连接,并发送消息。服务器向所有正在连接的客户端广播消息。
之后,Dos终端也进行连接,并发送消息,服务器接到消息后向所有正在连接的客户端广播消息(其中包括在线的android手机)
- ››Android 当修改一些代码时,使用什么编译命令可以最...
- ››Android 如何添加一个apk使模拟器和真机都编译进去...
- ››Android 修改Camera拍照的默认保存路径
- ››Android 如何修改默认输入法
- ››android开发中finish()和System.exit(0)的区别
- ››Android手势识别简单封装类
- ››android中查看项目数字证书的两种方法
- ››Android中获取IMEI码的办法
- ››android 相机报错 setParameters failed
- ››Android重启运用程序的代码
- ››Android为ListView的Item设置不同的布局
- ››android bitmap与base64字符串的互相转换
赞助商链接