客户机与服务器之间是按照一定的流程和格式在收发数据的,也就是遵循着一定的通信协议,XMPP是基于XML格式的通信协议,之前都是以文本加换行来规定的通信协议,不便于扩展,XMPP则带来更多可能性,一条消息内也能附加更多的内容。
交互流程:
1、客户机与服务器之间建立连结,客户机发送给服务器的第一条消息必须是登录消息或者注册消息。
2、若是登录成功,服务器转发给其他在线用户该用户的上线消息。
3、在线用户可以选择给某一个在线用户发送消息或者给全部在线用户发送消息。
4、服务器可以给用户发送消息或者踢人。
5、某用户下线,服务器会通知其他用户下线消息。
基于流程可以先把消息形式粗略分为9种:登录消息,登录应答消息,注册消息,注册应答消息,上线、下线消息,聊天消息,用户列表消息,还有由服务器自己发送给客户机的消息。
自定义的协议如下
1、登录消息:客户机登录时发送用户名密码给服务器
<m>
<type>login</type>
<name>name</name>
<pwd>pwd</pwd>
</m>
2、登录应答消息:服务器返回客户的登录请求是否成功
<m>
<type>loginRsp</type>
<state>登录结果</state><!--0:成功,其他:失败-->
</m>
3、注册消息:客户机发送注册请求给服务器
<m>
<type>reg</type>
<name>name</name>
<pwd>pwd</pwd>
</m>
4、注册应答消息:服务器返回客户的注册请求是否成功
<m>
<type>regRsp</type>
<state>注册结果</state><!--0:成功,其他:失败-->
</m>
5、聊天消息:
<m>
<type>chat</type>
<sender>senderName</sender>
<reciever>recieverName</reciever>
<msg>msg</msg>
</m>
6、上线消息:
<m>
<type>onLine</type>
<user>name</user><!--上线者名字-->
</m>
7、下线信息:
<m>
<type>offLine</type>
<user>name</user><!--下线者名字-->
</m>
8、用户列表信息:
<m>
<type>budyList</type>
<users>all,user1,user2,...</users>
</m>
9、服务器给客户机消息:
<m>
<type>serverMsg</type>
<user>name</user>
<msg>msg</msg>
</m>
编写中另外给服务器增加了一个管理界面,可以控制服务器端的启停,并有发私信、踢人,显示在线用户信息等功能。并且增加了一个虚拟数据库,客户端登录时,需要验证用户名和密码是否正确,否则登录失败。
运行界面:
不过还有很多问题解决中:
1、 注册功能还未实现。
2、 服务器界面上的表格的刷新还存在问题。
3、 用户可以重复登陆。
缺陷分析:
XML消息中标签很多,传输时增加了很多不必要信息,效率低下。