欢迎来到天天文库
浏览记录
ID:37976731
大小:462.50 KB
页数:19页
时间:2019-06-04
《socket编程 android》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、Androidsocket编程以非阻塞I/O服务器及Service为例 介绍Socket通信,有两个不足的地方, 1.服务器会造成IO的阻塞 即服务器一旦执行server.accept(); 将一直处于阻塞状态,直到有客户端请求连接。 2.服务器端没有建立用户列表,无法将某一客户端发送的消息广播给所有正在连接的客户端。 就好象是一个人自说自话,自己发送给客户端,自己接收服务器返回的消息。 基于以上两点,我改进了我的程序。 服务器端的改进: 1.通过采用socketchannel的非阻塞方式进行通信 2.建
2、立Userlist客户端的哈希表,存储已连接客户端的ip地址和服务器为其分发的socketchannel 客户端的改进: 1.采用Service与服务器端进行连接,发送数据,实时监听服务器返回的数据。 流程图: 需要改进的地方 服务器端: 1.当一个客户端断开连接以后,另一个客户端在收到消息之前也断开连接,而此时服务器正在向客户端发送消息, 因此,服务器的Thread.sleep时间不能太长,但也不能太短,因为考虑到服务器的负荷问题。 2.服务器容错处理机制需要改进。 客户端: 1.将Notificat
3、ionbar改为其他更为直观方式刷新显示。 2.容错处理机制的处理。 下面是效果图: 服务器端: dos客户端: Android客户端: 效果图的意思是,Android的客户端通过绑定Service与服务器端进行了连接,并发送消息。服务器向所有正在连接的客户端广播消息。 之后,Dos终端也进行连接,并发送消息,服务器接到消息后向所有正在连接的客户端广播消息(其中包括在线的android手机)第1页第2页第3页第4页第5页第6页 之前采用聊天敲门的方式来介绍Socket通信,有两个不足的地方, 1.服务器会
4、造成IO的阻塞 即服务器一旦执行server.accept(); 将一直处于阻塞状态,直到有客户端请求连接。 2.服务器端没有建立用户列表,无法将某一客户端发送的消息广播给所有正在连接的客户端。 就好象是一个人自说自话,自己发送给客户端,自己接收服务器返回的消息。 基于以上两点,我改进了我的程序。 服务器端的改进: 1.通过采用socketchannel的非阻塞方式进行通信 2.建立Userlist客户端的哈希表,存储已连接客户端的ip地址和服务器为其分发的socketchannel 客户端的改进: 1
5、.采用Service与服务器端进行连接,发送数据,实时监听服务器返回的数据。 流程图: 需要改进的地方 服务器端: 1.当一个客户端断开连接以后,另一个客户端在收到消息之前也断开连接,而此时服务器正在向客户端发送消息, 因此,服务器的Thread.sleep时间不能太长,但也不能太短,因为考虑到服务器的负荷问题。 2.服务器容错处理机制需要改进。 客户端: 1.将Notificationbar改为其他更为直观方式刷新显示。 2.容错处理机制的处理。 下面是效果图: 服务器端: dos客户端: An
6、droid客户端: 效果图的意思是,Android的客户端通过绑定Service与服务器端进行了连接,并发送消息。服务器向所有正在连接的客户端广播消息。 之后,Dos终端也进行连接,并发送消息,服务器接到消息后向所有正在连接的客户端广播消息(其中包括在线的android手机)第1页第2页第3页第4页第5页第6页 接上页 源代码如下: Server端: packagecom.android.Yao; importjava.io.*; importjava.nio.*; importjava.nio.chan
7、nels.*; importjava.net.*; importjava.util.*; importjava.nio.charset.*; importjava.lang.*; publicclassYaoChatServer { publicSelectorsel=null; publicServerSocketChannelserver=null; publicSocketChannelsocket=null; publicintthisport=4900; privateStringresul
8、t=null; privateHashtableuserlists; privateSocketChannelreadingsocket=null; publicYaoChatServer() { System.out.println("Insidestartserver"); } pub
此文档下载收益归作者所有