前段时间写了个自定义通信协议的聊天室(即用\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协议的多帐号聊天》 在移动通信领域,实时通讯功能已经成为各种应用程序不可或缺的一部分。Android平台提供了丰富的API和工具,使得开发者能够构建复杂且高效的应用,其中包括聊天...
这个压缩包文件“安卓Android源码——基于XMPP的即时聊天项目.zip”包含了关于在安卓平台上构建一个基于XMPP协议的即时聊天应用的资源。XMPP(Extensible Messaging and Presence Protocol,可扩展消息传递和存在...
服务器下的客户端也可以通信,XMPP的前身是一个开源组织制定的网络通信协议——Jabber,XMPP的核心是在网络上分片段发送XML流的协议,这个协议是XMPP的即时通讯指令的传递手段。 为了防止服务器间发送的数据被篡改...
XMPP(Extensible Messaging and Presence Protocol)是一种基于XML的开放标准通信协议,主要用于即时通讯(IM)和在线状态管理。它的设计目标是提供一个灵活、可扩展的框架,支持多种应用,如聊天、文件传输、语音...
### 基于Jabber/XMPP的即时通讯系统设计与实现——远程教育视角 #### 引言 随着互联网的迅速发展与普及,即时通讯(Instant Messaging, IM)已成为现代社会沟通的重要工具。它不仅提供了便捷的信息传递方式,还...
**Smack源码详解——基于XMPP的即时通讯客户端** Smack是一款开源的Java库,专为实现基于XMPP(Extensible Messaging and Presence Protocol)的即时通讯应用而设计。XMPP是一种开放标准,广泛用于创建实时通信系统...
**XMPP(Extensible Messaging and Presence Protocol)**是一种基于XML的实时通信协议,常用于实现即时消息和在线状态管理。它的设计目标是提供一个灵活、可扩展的框架,允许开发者构建分布式、交互式的网络应用...
【标题】: "WoChat即时通讯练手项目——基于xmpp、leancloud、环信" 在IT行业中,即时通讯(Instant Messaging, IM)系统是必不可少的一部分,它为用户提供了快速、实时的信息交流平台。本项目"WoChat"是一个用于...
XMPP的强大之处在于其丰富的扩展机制,允许开发者根据需求添加新的功能,如多用户聊天室、文件传输、语音和视频通话等。此外,XMPP也广泛应用于企业级通讯解决方案,因为它支持大规模的用户群和复杂的权限管理。
【Android代码——安卓开源简洁XMPP】项目是一个专注于在Android平台上实现XMPP协议通信的应用示例。XMPP(Extensible Messaging and Presence Protocol)是一种基于XML的实时通讯协议,广泛用于即时消息、语音和...
本文将围绕“jwchat-1.0-src.tar.gz_httpbind_jwchat”这一主题,深入探讨其背后的核心技术——XMPP协议、Openfire服务器以及jwChat客户端。XMPP(Extensible Messaging and Presence Protocol)是一种开放标准的...
《XMPP权威指南》是一本深入探讨可扩展通讯与表示协议(XMPP)的书籍,该协议基于XML作为数据交换的基础,主要用于实时通讯场景。XMPP不仅被广泛应用在各种应用程序中,同时也为开发者提供了构建自己独特应用的可能...
XMPP-MUC(多用户聊天)是 XMPP 协议的一个扩展,允许用户参与多人聊天室进行实时交流。在 Pidgin 中,虽然默认功能已经很全面,但有时用户可能希望获取更详细的信息,例如聊天室中其他参与者的具体状态。这就是...
对于群聊功能,XMPP支持MUC(Multi-User Chat)扩展,通过创建和加入聊天室来实现。开发者需要创建XMPPMUC类的实例,管理用户的聊天室加入、离开和发言权限。 在实际开发中,为了保证应用的性能和用户体验,我们...
3. **XMPPExtension**:XMPP框架包含了多种预定义的扩展,比如XEP-0045(多用户聊天室)、XEP-0199(XMPP性能监控)等。开发者可以根据需求选择合适的扩展进行集成。 4. **GCDAsyncSocket**:XMPPFramework依赖于...
众多的通讯平台和应用程序不断涌现,而其中一种开放标准——XMPP(Extensible Messaging and Presence Protocol)因其灵活性和可扩展性,被广泛应用在许多项目中。gloox,这个开源的C++库,便是遵循XMPP协议实现的...
Jabber协议基于XML,提供了高度可扩展性和灵活性,使得开发者可以创建定制化的、安全的IM解决方案。 即时通讯是现代网络应用中不可或缺的一部分,它允许用户快速、便捷地进行文本、音频、视频甚至文件传输。Jabber...
以下将详细介绍这些功能的实现,并基于提供的压缩包文件名称"androididimASmack"来推测所使用的库——Smack。 1. **Smack库简介** Smack是一个开源的XMPP(Extensible Messaging and Presence Protocol)库,适用...
XMPP 使用 XML 数据格式进行数据交换,这让它能够处理复杂的消息结构和扩展性,比如支持多用户聊天室、文件传输和脱机消息。Jabber 协议还支持认证、加密和路由,确保了通信的安全性和可靠性。 **JXA1.2框架特点** ...
此外,考虑到实时通信的需求,PublicConnector可能利用了WebSocket或XMPP(Extensible Messaging and Presence Protocol)协议来实现实时的消息传递,确保用户之间的即时交流。 在用户界面(UI)设计方面,...