前段时间写了个自定义通信协议的聊天室(即用\r\n标记字符串,作为一句话),总感觉自己弄的那个协议实现虽然简单,但是拓展性就太差了,只适合于发送聊天的内容,难以包含更多的信息。基于上述几点,于是就开始接触Xmpp协议,并自己定义了一个简单的Xmpp协议用以实现聊天室。
首先有2点要知道:
1.什么是Xmpp协议?
Xmpp协议是一种通信协议,有自己的
规则,即用Xml格式的消息进行通信。
2.Xml串的例子。
<msg><name>laoyang</name><msg>
上述是一条完整的Xml消息,首尾由<msg></msg>标识,里面就是消息的内容,不同的内容用不同的标签来标识,如<name></name>,然后name包含的内容,即名字就是laoyang
然后,这次不同于上次的是,我自己对这个聊天室做了一番分析,然后再实现的。
分析:
一.需求分析:
S.服务器:
启动|暂停服务器,对所有用户发送通知,对某个用户发送私信,实时显示在线用户列表,踢掉某个用户
C.客户端:
能注册账号,能登陆,可以向某个用户发送消息,可以向所有人发送消息,实时显示在线用户列表
二.C/S通信流程:
A:注册(C------>S) >>>>> 注册应答(S--------->C)>>>>>> 返回登陆界面
B:登陆(C--------->S) >>>>>>> 登陆应答(S--------->C)>>>>>>> (失败)返回登陆界面,(成功)进入聊天界面&&上线消息(S------->C&&发送在线用户表(S------------>C)
C:聊天(C--------->S------------>C)
D:下线 >>>>>> 发送下线消息(S--------->C)>>>>>>> 发送在线用户表(S---->C)
三.Xml串的种类:
a. 注册消息: <msg><type>register</type><IDcode>idnumber</IDcode><password>psw</password><username>name</username></msg>
b. 注册应答消息:<msg><type>regAns</type><answer>state</answer></msg> state:注册成功或者注册失败
c. 登陆消息:<msg><type>login</type><IDcode>idnumber</IDcode><password>psw</password></msg>
d. 登陆应答消息:<msg><type>loginAns</type><answer>state</answer><msg> state:登陆成功或者登陆失败
e. 聊天消息:<msg><type>chat</type><sender>name</sender><reciver>name</reciver><content>message</content></msg>
f. 上线消息:<msg><type>online</type><content>cnt</content></msg>
g. 下线消息: <msg><type>offline</type><content>cnt</content></msg>
h. 在线用户表: <msg><type>onlinelist</type><list>user1,user2,user3.....</list></msg>
i. 终止用户聊天的消息<msg><type>exit</type></msg>
四.关于类的结构的分析(由于内容有点多,所以放在附件的文本中,此处不再写出)
部分图片:
感想:
1.做软件,最重要,最关键的一步在于设计,所以在开始写代码前,一定要先分析需求,然后还要对如何实现做一个具体的分析与设计。
2.要进行通信,必须要有通信协议,做通信软件,必须要选择合适的通信协议。
3.测试软件性能时,要考虑各种意外情况的发生,比如:突然断网,服务器那边突然停电,So on....,这时要把异常处理的工作给做好。
展望:
本人也是个铁杆Dotaer,所以下一步的打算是做一个对战平台,上网搜了下原理,也看了下别人做的对战平台,觉得还是能够自己实现的,不过以后的日子就苦逼啦。 TCP/IP的书必须要去看了,对战平台的需求分析必须要去做了。
最后,附上源码和相关的文本(相关分析的文件用记事本打开就可以)
- 大小: 36.4 KB
- 大小: 29 KB
- 大小: 49.7 KB
分享到:
相关推荐
安卓Android源码——基于XMPP协议的多帐号聊天.zip
安卓Android源码——基于XMPP的即时聊天项目.zip
web端页面做IM聊天室功能,所以我们选择在web页面上直接与openfire做通信,这样可以减少服务器访问压力.web页面端通过应用strophe.js库,拼接XMPP字符串与openfire服务器进行通信
Android 基于XMPP协议IM聊天实现(客户端+服务端) 源码
php开发的基于XMPP 协议的聊天客户端源码
基于XMPP协议的手机多方多端即时通讯方案,包括详细的介绍和解决方案
本资源是自己写的利用XMPP协议进行聊天的软件,界面实现采用Qt,功能和QQ很类似,对学习XMPP协议和Qt很有帮助。
android基于xmpp协议的即时聊天demo 可加好友,可即时聊天,可运行
net平台 基于 XMPP协议的即时消息服务端简单实现
类似QQ的xmpp协议聊天 基本功能都有了
安卓Android源码——简洁XMPP.zip
基于XMPP协议的WEBIM 简单实现,如有开发openfire+spark/jwchat的可以参考
初步学习XMPP协议,并完成了一个基于XMPP的简单即时通信Demo。
基于XMPP协议的类似QQ的即时通信demo 简单实现了 注册,登录,添加好友,删除好友,好友的通信 包括发文本,图片和声音。
服务器下的客户端也可以通信,XMPP的前身是一个开源组织制定的网络通信协议——Jabber,XMPP的核心是在网络上分片段发送XML流的协议,这个协议是XMPP的即时通讯指令的传递手段。 为了防止服务器间发送的数据被篡改...
基于XMPP协议的Android即时通信系统设计
本文介绍了一种基于XMPP 协议的AndroidPn 开源框架的实现模型,将其部署在MySQL 数据库和Tomcat 服务器下,实现并改进了实时推送消息、自定义消息结构和内容、推送服务开机启动、手机端服务唤醒、发送离线消息等实用...