`
王者无敌Java
  • 浏览: 69520 次
  • 性别: Icon_minigender_1
  • 来自: 盐城->长沙->深圳
社区版块
存档分类
最新评论

网络通信基础第四式——实现自定义xmpp协议的KTM

阅读更多
        从寒假正式开始通信项目的学习,距今已经快有两个月了。寒假期间,回到家,因为种种原因(多数是因为贪玩),大概一个多月没接触通信项目的开发,很是愧疚啊!寒假结束,一开学,院里就组织大家做课程设计,我为了尽早重回通信项目的开发,连夜赶工将课程设计的订票系统做完,第一个将源代码交给老师。随后,我立马开始了通信项目的后续开发。
        对于将近一个多月没看的代码,虽然是自己辛辛苦苦敲出来的,但是一眼看去竟是那样的陌生,我发誓下次开发项目再也不拖沓了。我花了整整一天时间,回顾之前所写的代码,并结合胡哥的教诲,慢慢重新回到昔日项目开发的专注状态。寒假期间的集训,我基本完成了服务器的相关构建,包括创建循环等待的多线程服务器,实现服务器的启停,通过命令行输入telnet指令完成客户机与服务器的连接。
        在最近一个星期,我通过自学文档以及与胡哥的交流,将该通信项目的基本功能逐一实现,并将此程序取名为KTM(king talk message),和一个著名车队同名,哈哈!
        下面我就讲讲这一阶段的初步成果吧。首先,我完善了服务器端的界面,实现了服务器端对于客户机的简单管理和发送消息。其次,编写了简单的登录和聊天界面。最后,实现了自定义xmpp协议,使服务器和客户机的交互更加规范,流程更加清晰,相比之前的完全自定义协议要好理解的多。

一、消息类型:
1、登录请求消息
<msg>
<type>login</type>
<name>用户名</name>
<pwd>密码</pwd>
</msg>
<msg><type>login</type><name>user1</name><pwd>pwd1</pwd></msg>
<msg><type>login</type><name>user2</name><pwd>pwd2</pwd></msg>
<msg><type>login</type><name>user3</name><pwd>pwd3</pwd></msg>

2、登录应答消息
<msg>
<type>loginResp</type>
<result>登录返回结果</result>
<!--0:登录成功,1:用户名和密码不符,登录失败-->
</msg>

3、上线消息:
<msg>
<type>onLine</type>
<userName>上线者的用户名</userName>
<!--上线者用户名-->
</msg>
<msg><type>onLine</type><userName>上线者的用户名</userName></msg>

4、在线用户表消息:
<msg>
<type>userList</type>
<users>用户1,用户2,...</users>
<!--在线的所有用户名,以“,”隔开-->
</msg>
<msg><type>userList</type><users>用户1,用户2,...</users></msg>

5、聊天消息:
<msg>
<type>chat</type>
<sender>发送者用户名</sender>
<!--发送者用户名-->
<receiver>接受者用户名</receiver>
<!--接受者用户名,如果为空,表示对所有用户发送消息-->
<content>文本消息内容</content>
<!--发送的消息内容-->
</msg>
<msg><type>chat</type><sender>发送者用户名</sender><receiver>接受者用户名</receiver><content>文本消息内容</content></msg>

6、服务器踢人消息:
<msg>
<type>kickOff</type>
<userName>服务器踢掉用户的用户名</userName>
<!--服务器踢掉用户的用户名-->
</msg>
<msg><type>kickOff</type><userName>服务器踢掉用户的用户名</userName></msg>

7、下线消息:
<msg>
<type>logOff</type>
<userName>下线者的用户名</userName>
<!--下线者用户名-->
</msg>
<msg><type>logOff</type><userName>下线者的用户名</userName></msg>

二、交互流程:
1、客户机与服务器建立TCP/IP连接后,发送的第一条消息,只能是登录请求消息。
2、服务器向客户机发送登录应答消息,若某客户机登录成功后,服务器对在之前所有的在线用户发送有人上线的消息, 并向该客户机发送在线用户列表消息。若无客户机登录成功,则断开客户机与服务器建立的TCP/IP连接。
3、服务器接收到客户机发送到聊天消息后,将这条消息发送给指定的客户机用户,服务器也可以自己向客户机发送聊天信息。
4、服务器可以在客户机登陆之后的任意时刻将该客户机踢掉,当服务器将该客户机踢掉后,
服务器对所有剩下的客户机发送该客户机下线的消息。
5、某个客户机主动下线后,服务器对所有剩下的客户机发送该客户机下线的消息。


三、相关界面:


图1-1 服务器管理界面



图1-2 客户登录界面



图1-3 客户聊天界面
  • 大小: 11.8 KB
  • 大小: 17.3 KB
  • 大小: 18.3 KB
5
11
分享到:
评论
2 楼 toeo 2011-04-13  
知道 google的 gtalk的 实现就是基于 xmpp 这个标准的。
没有想到还有人研究。

我在 google wave 里面的代码 里面看到 基于 xmpp的通讯。没有具体看。

http://code.google.com/appengine/docs/java/xmpp/overview.html

google app 上面就提供了这个通讯接口。不过要在 google的 app 上面才可以运行。

http://code.google.com/appengine/articles/using_xmpp.html


没有太深入研究。。继续关注。
1 楼 hnujerrymouse 2011-03-17  
越来越厉害了,我要向你看齐才行了啊,哈哈

相关推荐

Global site tag (gtag.js) - Google Analytics