Android 即时连天工具的开发

 

客户端,开三个线程,thread1监听接收消息,用udp,thread2定时向服务器发送在线消息,用tcp,thread3每隔一段时间检查发送的消息的时间是否超时(客户端之间每次收到消息都要发送一个确认包,每次发送消息,都要把此消息加入全局json,加上time,消息id等标签。直到收到确认消息后删除全局变量中的此消息),超时后就把此消息发送服务器,当好友再次上线后,就发送出去。

 

客户端登陆时用tcp连接服务器,服务器返回在线人员的列表,及发给此用户的离线消息。

 

 

 

需要注意:

 

 

一,android,主线程,即ui线程终不能执行耗时操作,连接网络的操作要在子线程中执行,子线程不能操作ui,要通过handler消息,发送与主线程操作ui。

二,客户端用的所有的udp---socket都是一个,即保存到全局变量中的socket,同一个端口不能同时绑定两次。

三,刷新消息,刷新在线下线,用的是广播机制,在 广播接收器中new个activity类,注意此activity类一定要在android的堆栈中,即曾经打开过此ui,并且没有销毁他。否则在广播接收器中会提示ui组件resure源找不到。

四,全局变量用application,要在AndroidManifes.xml中定义,调用时用getapplication(),每次退出程序要把全局变量清除依次,否则下次登录可能还会有;

 

五,记得在AndroidManifest.xml中加入一些权限,涉及到连接网络的权限,读写sd卡的权限,等等。

 

六,注意android的本地ip为10.0.2.2,java的本地ip为127.0.0.1

七,聊天界面是两个List列表相互交叉,显示消息,气泡是7.png格式的图片。

八,聊天消息存到文件中,保存为json格式

 

服务器端,开三个线程,thread1用于监听登陆,和定时向服务器发送的在线信息,监听ip,port的变化,并刷新在线用户列表的time。及时向在线好用发送用户上线下线的消息。Thread2,用于定时检查用户时间是否超时。Thread3,udp监听,客户端发送的离线消息,并添加进数据库。

 

 

服务端有一个全局变量,为用户的列表,用json存储,{id{ip,port,time}}

 

 

 

 

 

此外,添加删除朋友,注册,等不需要同步到其他朋友的操作,一律用httpclient请求服务端。