Smack 连接XMPP服务器举例(包含Smack连接Gtalk服务器的两种方案)
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();
}
推荐文章 |
