网站首页 新闻首页 网页设计图形动画软件编程网站开发办公软件操作系统数据库网络技术认证考试范文资料黑客攻防 书籍教程 进入论坛

Smack 连接XMPP服务器举例(包含Smack连接Gtalk服务器的两种方案)

http://www.diybl.com/ 2008-3-3  网络 点击:  [ 评论 ]
文章搜索:    【点击打包该文章】

SmackJive Software贡献给开源社区的又一力作,它是一个XMPPjabber)客户端连接库,具有发送/接受消息,更改出席(presence)状态等众多功能的API,同时Smack又是纯Javapure 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还是没有成为正式标准之前的JabberSHIGEOKA在这一领域就已经有所建树,但是现在可能自己开公司了吧),按照官方文档的说明来讲,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();

       }
 

如果图片或页面不能正常显示请点击这里 站内搜索:   

文章评论

请您留言