基于JABBER的IM通讯

基于JABBER的IM通讯 本来是准备做一个项目的,项目要求用JABBER实现IM的功能,所以就开始研究这个协议了。这个协议其实就是一个在线的EMAIL系统,当然还包含了IM的功能。现在在RFC中,这个协议的标准叫XMPP(Extensive Message Presence Protocol),翻译成中文应该叫"扩展的消息在线协议"吧. 为什么是Extensive了,大家都知道XML吧,XMPP通信内容都是XML格式的. 1.JABBER的协议模型 XMPP | SASL | TSL | TCP 2.JABBER的通讯模型 SERVER S1 -------- SERVER S2 / / | / / | CLINET A CLIENT B CLIENT C 3.JABBER 服务端 现在使用最广泛的就是Openfire: http://www.igniterealtime.org/ 用JAVA写的,用WEB进行管理,方便而且简单. 当然,使用这个服务端,一定要知道它实现了哪些协议,软件安装好后,在Document目录下面有 有一个Protocol Support的Html文件.看看就知道了. 4.JABBER 客户端 JABBER客户端软件很多,比如现在比较流行的Pandion和Exodus.后者是开源的是用Delphi写的; 前者是FreeWare(免费软件),但是不开源. 还有一个是咱们中国人写的,以前叫MYICQ,后来改名为LinQ了,地址为:http://cosoft.org.cn/projects/myicq ,看了P2P的实现那一小块,感觉不错。 当然还有就是实现了XMPP协议的CODE LIBRARY. 我现在用来测试的CODE LIBRARY为gloox,用C++写的,在WINDOWS 下面直接用VC6编译生成DLL和LIB 文件,然后在自己的工程中就可使用它的库来开发程序了,当然也可以放在一起编译,在调试的时候还能跟踪进去.代码不是很大,我就把GLOOX的代码放上来了,见文章末. 5.参考 JABBER工程站点地址:http://www.jabber.org/ 在JABBER的中文站点,XMPP-CORE文档在如下地址: http://wiki.jabbercn.org/space/XMPP%E6%96%87%E6%A1%A3%E5%88%97%E8%A1%A8 /XMPP%E6%AD%A3%E5%BC%8FRFC%E6%A0%87%E5%87%86/RFC3920 如果要使用已经实现的CODE LIBRARY 等等,也应该知道这个协议. 6.客户端如何直接传输语音和视频 有一文在网上看到了,是"兵工自动化"杂志上的文章 "2007年第1期摘录:基于Jabber协议的P2P通讯系统", 没看到内容,介绍里面稍微说了一下这方面的内容吧,但就目前JABBER服务器提供的功能来说,好象不提供UDP/TCP Hole Punching.如果是扩展服务器COMPONENT的话,应该可以.不知道作者是怎么实现的. 现在的服务器支持FILE TRANSFER,但是这是通过SERVER中转的,传输文本文件还行,要传输一个几百M的软件过去,我看服务器够呛的. 可以参考我放在本BLOG上的P2P技术的文章,相信这样实现也是很简单的. 7.一个通信实现的XML例子 基于gloox的example下的register_example程序和roster_example程序. 前一个是注册的,后一个是通信的. 下面S指的是消息从SERVER发出,C为消息从CLIENT发出. TCP连接建立:connecting to a245427228c4407 (192.168.0.7:5222) 1.会话协商 C: S: 2.服务端询问CLIENT支持什么安全认证 S: DIGEST-MD5 PLAIN ANONYMOUS CRAM-MD5 zlib 3.CLIENT给服务端请求要注册用户 C: S: XMPP Client Registration Please provide the following information jabber:iq:register 4.CLIENT根据服务端的要求提交用户信息 C: testuser testpwd S: 5.CLIENT关闭注册的STREAM元素 C: roster_example例: ROSTER过程 1.TCP连接 connecting to a245427228c4407 (192.168.0.7:5222) 2.会话协商 C: S: 3.安全协商 S: DIGEST-MD5 PLAIN ANONYMOUS CRAM-MD5 zlib C: 4.服务端就CLIENT的安全协议,发送测试数据(BASE64) S: c mVhbG09ImEyNDU0MjcyMjhjNDQwNyIsbm9uY2U9IkV6UzZXV2t1YzJVMkVoeEd3dGs4QjdwSll1cHpMV HNxcU9WN0ZjdkIiLHFvcD0iYXV0aCIsY2hhcnNldD11dGYtOCxhbGdvcml0aG09bWQ1LXNlc3M= C: d XNlcm5hbWU9InRlc3R1c2VyIixyZWFsbT0iYTI0NTQyNzIyOGM0NDA3Iixub25jZT0iRXpTNldXa3VjM lUyRWh4R3d0azhCN3BKWXVwekxUc3FxT1Y3RmN2QiIsY25vbmNlPSIwMDAwMDAyOTAwMDA0ODIzMDAwM DE4YmUwMDAwNjc4NCIsbmM9MDAwMDAwMDEscW9wPWF1dGgsZGlnZXN0LXVyaT0ieG1wcC9hMjQ1NDI3M jI4YzQ0MDciLHJlc3BvbnNlPWZmMTY0NTM2NmM5ZWI0NmQ5ZDE0Y2Y0ODk4ODMzNzgzLGNoYXJzZXQ9d XRmLTg= 5.服务端安全测试成功 S: cnN wYXV0aD1lY2U3NDBhMzg0NDVhMzRlNDJiZjg2MjQ2YmU0OWQzNA== 6.PRESENCE的SCENARIO开始,STREAM从新开启 C: S: 7.PRESENCE的协商 S: zlib C: S: testuser@a245427228c4407/28cf95e9 C: S: C: C: S: S: 8.在线显示 C: 0 S: C: C: C: S: S: 9.使服务端接受PRESENCE情况 C: 10.从用户user发送过来的消息,希望加为好友 S: S: fea759d5f9f52b7 95d35dae169dbfcd0b8e5585b 8 S: 11.接受请求 C: S: C: rosterTest 0.9.3 12.接收从user发来的消息"hello" S: hell o hello shinyicons
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值