首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > 移动开发 >

smack跟openfire通信的简单例子

2012-09-01 
smack和openfire通信的简单例子smack是什么?具体百度一下。我的理解也不深,我理解其实就是XMPP协议的实现。

smack和openfire通信的简单例子

smack是什么?具体百度一下。我的理解也不深,我理解其实就是XMPP协议的实现。都是浮云,一切都是工具。

?

首先还是下载smack,我下载的是smack_3_2_0.tar。这个包里有四个jar文件。

首先创建一个java工程。创建一个lib文件夹,把这四个jar包放到lib中,添加到编译路径中。

目录接口如下:

?

smack跟openfire通信的简单例子

怎么图片还还没传上来。哎。

?

创建一个TestSmack.java类。具体代码如下:

package org.yangzc.smack;import org.jivesoftware.smack.ConnectionConfiguration;import org.jivesoftware.smack.PacketListener;import org.jivesoftware.smack.XMPPConnection;import org.jivesoftware.smack.XMPPException;import org.jivesoftware.smack.filter.PacketFilter;import org.jivesoftware.smack.packet.IQ;import org.jivesoftware.smack.packet.Packet;public class TestSmack {public static void main(String[] args) throws XMPPException {ConnectionConfiguration config = new ConnectionConfiguration("127.0.0.1", 5222);XMPPConnection connection = new XMPPConnection(config);XMPPConnection.DEBUG_ENABLED = true;connection.connect();connection.login("admin", "admin");//ChatManager chatManager = connection.getChatManager();//chatManager.addChatListener(new ChatManagerListener(){//@Override//public void chatCreated(Chat chat, boolean arg1) {//chat.addMessageListener(new MessageListener(){//@Override//public void processMessage(Chat arg0, Message arg1) {//System.out.println(arg1.getBody());//}//});////}//});connection.addPacketListener(new PacketListener(){@Overridepublic void processPacket(Packet arg0) {System.out.println(arg0);}}, new PacketFilter(){@Overridepublic boolean accept(Packet arg0) {return true;}});IQ iq = new IQ(){@Overridepublic String getChildElementXML() {  StringBuilder buf = new StringBuilder();  buf.append("<query xmlns="com:im:group"/>");  return buf.toString();}                };        connection.sendPacket(iq);//Chat chat = chatManager.createChat("yangzc", new MessageListener(){//@Override//public void processMessage(Chat arg0, Message arg1) {//System.out.println(arg1.getBody());//}//});//chat.sendMessage("hello World!!!");//BufferedReader cmdIn = new BufferedReader(new InputStreamReader(System.in));//        for(;;) {//          try {//             String cmd = cmdIn.readLine();//             if("!q".equalsIgnoreCase(cmd)) {//                 break;//             }//            chat.sendMessage(cmd);//          }catch(Exception ex) {//          }//        }                connection.disconnect();        System.exit(0);}}
?

测试:启动openfire服务端,添加插件到openfire中。运行这个例子。可以看到,smack和openfire的插件通信成功。

?

总结:

这里比较关键的一句话时是:buf.append("<query xmlns="com:im:group"/>");这句话指定了这个消息是发动到那个命名空间中。

只有发送到openfire插件对应的命名空间中openfire插件才可以正确接收。

?

当初在这里费了好大的功夫。至此openfire插件和smack的通信实现算是告一段落。剩下的工作就是xml了,不用说了吧,很简单的。

?

明天写什么呢?应该在研究一下androidpn。简单看了一眼,好像是android领域的服务器推送。推动就那些吧,推推拉拉的。


openfire则是XMPP协议的XMPP服务器嘛 

热点排行