XMPP通讯过程-简单实例
来源:互联网 发布:nginx 并发设置 编辑:程序博客网 时间:2024/05/16 19:10
版权所有,转载请注明出处:http://guangboo.org/2013/02/25/xmpp-communication-implement-with-xmpppy
上一篇文章《XMPP通讯过程简介》介绍了XMPP协议通讯的大致主要的过程。本文基于该文,并结合实例来直观感受XMPP通讯过程,本文的代码采用python编写,使用了XMPP协议的Python实现xmpp.py(0.5.0rc1)库;尝试连接gtalk服务器,实现基本的通讯过程。
XMPPPY简介
xmpppy库是采用python编写的XMPP协议的实现,它是jabberpy项目的替代方案,后者已停止维护。采用该库并结合python编程语言的特性,可以快速的实现基于XMPP协议的应用,如即时聊天系统。之后在介绍XMPP协议过程中,都将采用该库编写实例,因此这里不做详细介绍,之后会详细的介绍XMPPPY项目,并会对其源码进行分析,以便了解XMPP协议的工作原理或工作方式。
Gtalk简介
Gtalk(Google Talk)是google公司于2005年8月推出的一款IP电话和即时通讯服务,它采用了XMPP协议,并采用XMPP扩展协议Jingle实现VoIP功能。google提供了gtalk客户端应用,但是其服务是面向所有基于XMPP协议的实现,因此我们也可以通过XMPP协议连接gtalk服务。
值得说的是,2005年12月google推出了libjingle库,实现了Jingle协议。该扩展协议可以实现IP电话、视频交流及其他点对点的多媒体服务。
另外,登录gtalk需要使用gmail账户,并且服务器地址是talk.google.com,端口为5223。
代码演示
如下python代码实现简单的XMPP通讯过程:
# -*- codeing:utf-8 -*-import xmppusername = 'guangboo49@gmail.com'password = '***********'to = 'zhangsan@gmail.com'msg = 'Hi, Zhang San.'def main(): client = xmpp.Client('gmail.com') client.connect(server = ('talk.google.com', 5223)) client.auth(username, password, 'botty') client.sendInitPresence() message = xmpp.Message(to, msg, typ = 'chat') client.send(message)if __name__=='__main__': main()
这段代码的功能:使用本人账户guangboo49@gmail.com连接服务器(talk.google.com, 5223),然后进行验证,在进行初始化出席状态,最后发送一条消息给zhangsan@gmail.com。
其实xmpp.Client('gmail.com')的参数是用来传递xmpp通讯的域,由于我们使用的是gmail账户,都是gmail.com为域的。connect方法的参数其实都使可选的,只是如果connect不传递参数是,系统会根据域gmail.com加上默认的5222端口来连接服务器,显然对于gtalk服务来说是不行的,所有这里传递一个server参数,指定gtalk服务器的地址和端口。另外还有proxy, secure等参数,分别表示代理,和是否使用SSL/TLS建立连接。验证的方法auth的前两个参数较容易理解,第三个参数是资源名称,这里传递的是botty,该参数也是可选的,如果不传递,系统会指定xmpppy为资源名。该方法还有第三个参数sasl,用于指定是否采用sasl方式进行验证。sendInitPresence方法会想服务器发"<presence />"节,用于初始化出席状态,便于通知所有联系人。Message类是XMPP节类型(IQ, Message, Pressence)中的一种,用于发送即时消息,这里的typ参数用于支持消息为两个人的聊天,如果是群聊或组聊的话可以使用groupchat。to表示消息的接收端jid。然后使用send方法将Message的xml串发送到服务器端。这样如果zhangsan@gmail.com也在线的话,将收到“Hi, Zhang San.”的消息。
另外,代码执行结果会输入很多日志信息,因为xmpppy在很多地方还提供了debug参数,默认是要输出很多日志。
本实例非常简短,主要演示使用XMPP进行通讯的过程,当然要实现完整的即时聊天系统还需要很多更加复杂的工作,之后会慢慢涉及。
- XMPP通讯过程-简单实例
- XMPP通讯过程简介
- 串口通讯简单实例
- socket的简单通讯实例
- XMPP 通讯原语
- 存储过程简单实例
- 存储过程简单实例
- 基于TCP的简单通讯实例
- XMPP学习2-XMPP通讯原语
- android客户端xmpp & smack & openfire简单开发实例
- RAKENT创建UDP实例,RAKNET简单通讯实例
- XMPP通讯开发-服务器连接
- XMPP通讯开发-好友文件传输
- xmpp 及时通讯客户端开发
- XMPP通讯环境的搭建
- 分页存储过程简单实例
- Oracle存储过程简单实例
- Oracle存储过程简单实例
- c#编写的程序打包成应用程序
- windows下eclipse android-ndkr8b环境配置
- 对象转Byte数组,Byte数组转对象
- 在 VMware Workstation 中安装 JUNOS Olive 12.2R2.4
- vs2010使用gmock
- XMPP通讯过程-简单实例
- 计算机专业术语
- 连接多个设备时的adb使用
- windows系统制作显示桌面快捷键
- 判断物体是否在视角内(巧妙!)
- c++指针常见错误
- CentOS安装光盘自带的MySQL过程
- InstallShield内部库函数之注册表函数
- VMware不能上网问题