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

本文分享了作者在寒假期间及开学后对于通信项目KTM的开发经历与成果,包括服务器构建、登录聊天界面设计及自定义XMPP协议实现等。
[size=large] 从寒假正式开始通信项目的学习,距今已经快有两个月了。寒假期间,回到家,因为种种原因(多数是因为贪玩),大概一个多月没接触通信项目的开发,很是愧疚啊!寒假结束,一开学,院里就组织大家做课程设计,我为了尽早重回通信项目的开发,连夜赶工将课程设计的订票系统做完,第一个将源代码交给老师。随后,我立马开始了通信项目的后续开发。
对于将近一个多月没看的代码,虽然是自己辛辛苦苦敲出来的,但是一眼看去竟是那样的陌生,我发誓下次开发项目再也不拖沓了。我花了整整一天时间,回顾之前所写的代码,并结合胡哥的教诲,慢慢重新回到昔日项目开发的专注状态。寒假期间的集训,我基本完成了服务器的相关构建,包括创建循环等待的多线程服务器,实现服务器的启停,通过命令行输入telnet指令完成客户机与服务器的连接。
在最近一个星期,我通过自学文档以及与胡哥的交流,将该通信项目的基本功能逐一实现,并将此程序取名为KTM(king talk message),和一个著名车队同名,哈哈!
下面我就讲讲这一阶段的初步成果吧。首先,我完善了服务器端的界面,实现了服务器端对于客户机的简单管理和发送消息。其次,编写了简单的登录和聊天界面。最后,实现了自定义xmpp协议,使服务器和客户机的交互更加规范,流程更加清晰,相比之前的完全自定义协议要好理解的多。[/size]
[size=large]一、消息类型:[/size]
1、登录请求消息
[color=blue][size=medium] <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>[/size][/color]
2、登录应答消息
[color=blue][size=medium] <msg>
<type>loginResp</type>
<result>登录返回结果</result>
<!--0:登录成功,1:用户名和密码不符,登录失败-->
</msg>[/size][/color]
3、上线消息:
[color=blue][size=medium] <msg>
<type>onLine</type>
<userName>上线者的用户名</userName>
<!--上线者用户名-->
</msg>
<msg><type>onLine</type><userName>上线者的用户名</userName></msg>[/size][/color]
4、在线用户表消息:
[color=blue][size=medium] <msg>
<type>userList</type>
<users>用户1,用户2,...</users>
<!--在线的所有用户名,以“,”隔开-->
</msg>
<msg><type>userList</type><users>用户1,用户2,...</users></msg>[/size][/color]
5、聊天消息:
[color=blue][size=medium] <msg>
<type>chat</type>
<sender>发送者用户名</sender>
<!--发送者用户名-->
<receiver>接受者用户名</receiver>
<!--接受者用户名,如果为空,表示对所有用户发送消息-->
<content>文本消息内容</content>
<!--发送的消息内容-->
</msg>
<msg><type>chat</type><sender>发送者用户名</sender><receiver>接受者用户名</receiver><content>文本消息内容</content></msg>[/size][/color]
6、服务器踢人消息:
[color=blue][size=medium] <msg>
<type>kickOff</type>
<userName>服务器踢掉用户的用户名</userName>
<!--服务器踢掉用户的用户名-->
</msg>
<msg><type>kickOff</type><userName>服务器踢掉用户的用户名</userName></msg>[/size][/color]
7、下线消息:
[color=blue][size=medium] <msg>
<type>logOff</type>
<userName>下线者的用户名</userName>
<!--下线者用户名-->
</msg>
<msg><type>logOff</type><userName>下线者的用户名</userName></msg>[/size][/color]
[size=large]二、交互流程:[/size]
[color=red][size=medium]1、客户机与服务器建立TCP/IP连接后,发送的第一条消息,只能是登录请求消息。
2、服务器向客户机发送登录应答消息,若某客户机登录成功后,服务器对在之前所有的在线用户发送有人上线的消息, 并向该客户机发送在线用户列表消息。若无客户机登录成功,则断开客户机与服务器建立的TCP/IP连接。
3、服务器接收到客户机发送到聊天消息后,将这条消息发送给指定的客户机用户,服务器也可以自己向客户机发送聊天信息。
4、服务器可以在客户机登陆之后的任意时刻将该客户机踢掉,当服务器将该客户机踢掉后,
服务器对所有剩下的客户机发送该客户机下线的消息。
5、某个客户机主动下线后,服务器对所有剩下的客户机发送该客户机下线的消息。[/size][/color]

[size=large]三、相关界面:[/size]

[align=center][img]http://dl.iteye.com/upload/attachment/434479/223397c8-5239-3764-a4af-6b64ed5c8441.png[/img]
图1-1 服务器管理界面[/align]

[align=center][img]http://dl.iteye.com/upload/attachment/434476/17e4c58b-3c99-3f77-b5f4-f517bd6aaf36.png[/img]
图1-2 客户登录界面[/align]

[align=center][img]http://dl.iteye.com/upload/attachment/434478/84e71ec7-4a58-3698-ab95-8822306b4b64.png[/img]
图1-3 客户聊天界面[/align]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值