标题
[xmpp/java/gtalk]Smack连接XMPP服务器举例[包含Smack连接Gtalk服务器的两种方案]zt
clq
浏览(0) +
2008-10-28 15:19:35 发表
编辑
关键字:
[xmpp/java/gtalk]Smack连接XMPP服务器举例[包含Smack连接Gtalk服务器的两种方案]zt
from http://blog.csdn.net/racingtom/archive/2008/03/02/2140004.aspx
--------------------------------------------------
Smack 连接XMPP服务器举例(包含Smack连接Gtalk服务器的两种方案)收藏
新一篇: 使用Notify4b进行即时通讯(IM)消息发送 | 旧一篇: Openfire源代码研究二(客户端连接)
Smack是Jive Software贡献给开源社区的又一力作,它是一个XMPP(jabber)客户端连接库,具有发送/接受消息,更改出席(presence)状态等众多功能的API,同时Smack又是纯Java(pure Java)库程序,它可以方便的嵌入到你的工程中为你创建小到只具有发送/接受提示消息,大到具有功能完备的XMPP客户端应用程序。Smack遵循Open Source Apache 许可(总所周知,Apache许可的麻烦是最少的,也是非常灵活的许可),所以Smack无论在商业软件中或是非商业软件中都可以使用。
Smack是一个使用非常简单但功能非常强大的XMPP库,它可以很少的语句就可以连接到远程XMPP服务器,同时在应对各种XMPP服务器连接参数的不同Smack又可以通过其丰富的连接选项配置来成功的连接远程XMPP服务器,无论是jabber.org还是Gtalk服务,只要是遵循XMPP协议的XMPP服务器,都可以通过Smack来进行连接。
Smack无疑在设计上是优秀的,这继承了Jive software (www.jivesoftware.com)在XMPP协议相关产品上的设计特点,例如Openfire服务器(这几乎是可以肯定的,Smack的设计者之一是IAIN SHIGEOKA,他是《Manning - Instant messaging in java》一书的作者,当XMPP还是没有成为正式标准之前的Jabber时,SHIGEOKA在这一领域就已经有所建树,但是现在可能自己开公司了吧),按照官方文档的说明来讲,Smack有一下优点:
1. Smack不会像其他一些XMPP库那样强迫你在包层(packet level 注:这里的packet应该说的是XMPP 的XML packet)进行编码。Smack提供了一些更智能的工作在更高层(注:packet层之上)之上的构造,例如Chat类和Roster类。这样会令你更加高效的编程。
2. 不要求你熟悉XMPP XML格式,即使你可能很熟悉它。
3. 提供简单的机器对机器(machine to machine)通讯,Smack允许你设置消息的各种属性,即使这种属性是用Java Object。
4. Smack遵循Open Source Apache许可,无论在商业软件中或是非商业软件中都可以使用。
Smack使用起来非常简单,下面我举两个简单的例子,一个是使用默认参数进行连接XMPP服务器,另一个是连接Gtalk服务器,其中连接Gtalk服务器的例子我将会就Smack版本的不同给出两个方案。
1. 利用Smack使用默认参数对远程XMPP服务器进行连接。
XMPPConnection connection = new XMPPConnection("jabber.org");
connection.connect();
connection.login("racingtom", "password");
Chat chat = connection.getChatManager().createChat("sui.dapeng@gmail.com",
new MessageListener() {
public void processMessage(Chat chat, Message message) {
System.out.println("Received message: " + message);
}
});
chat.sendMessage("Hi buddy!");
2. 连接Gtalk服务器
在连接Gtalk服务器是因为Smack版本的不同的解决方案,Smack 2.0中有单独的连接Gtalk服务器的类,名字
叫做GoogleTalkConnection,而Smack当前的版本已经去掉了与Gtalk服务相关的类,大概是不想突出Gtalk
的特殊性,也是为了去掉那么多重复的代码吧。所以在找不到GoogleTalkConnection类的情况下很多程序员在
刚开始连接Gtalk时出现了麻烦,其实国外论坛有很多解决的方案。
2.1 Smack2.0连接Gtalk服务器
XMPPConnection connection = new GoogleTalkConnection();
connection.login("racingtom", "password");
Chat chat = connection.getChatManager().createChat("sui.dapeng@gmail.com",
new MessageListener() {
public void processMessage(Chat chat, Message message) {
System.out.println("Received message: " + message);
}
});
chat.sendMessage("Hi buddy!");
2.2 Smack当前版本(目前版本为3.04)连接Gtalk服务
ConnectionConfiguration connectionConfig = new ConnectionConfiguration(
"talk.google.com",5222,"gmail.com");
XMPPConnection connection = new XMPPConnection(connectionConfig);
try {
connection.connect();
connection.login("sui.dapeng", "password");
ChatManager chatmanager = connection.getChatManager();
Chat newChat = chatmanager.createChat("racingtom@gmail.com",
new MessageListener() {
public void processMessage(Chat chat, Message message) {
System.out.println("Received message: " + message.toXML());
}
});
newChat.sendMessage("Hi, racingtom");
} catch (XMPPException e) {
e.printStackTrace();
}
clq
2008-10-28 15:23:43 发表
编辑
这个是 python 的.
--------------------------------------------------
Jabber Gtalk Bot初体验
June 3rd, 2007 | Published in 玩转科技 | 6 Comments
Jabber已经越来越有影响力了,心血来潮今天想研究下Jabber Bot怎么写。
1.首先安装Jabber的Python封装xmpppy
2.xmpppy需要调用dns包,安装pydns
3.写一段代码,保存为xsend.py
import sys,os,xmpp
if len(sys.argv) < 2:
print “Syntax: xsend JID text”
sys.exit(0)
tojid=sys.argv[1]
text=’ ‘.join(sys.argv[2:])
jidparams={}
jidparams['jid']=’yourname@gmail.com’
jidparams['password']=’yourpassword’
jid = xmpp.protocol.JID(jidparams['jid'])
cl = xmpp.Client(jid.getDomain(),debug=[])
cl.connect((’talk.google.com’,5222))
cl.auth(jid.getNode(),jidparams['password'])
cl.send(xmpp.protocol.Message(tojid,text,typ=’chat’))
4.用xsend.py targetname@gmail.com text的语法发送消息
5.没有第五步了,不过记得要把发信息的gmail帐号和收信息的gmail帐号加为好友才发的过去哦。
有时间可以自己写个bot来玩玩。也许每人都有自己定制bot的时代已经离我们不远了。
NEWBT官方QQ群1: 276678893
可求档连环画,漫画;询问文本处理大师等软件使用技巧;求档softhub软件下载及使用技巧.
但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件.
验证问题说明申请入群原因即可.