`
yangzc106
  • 浏览: 154520 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

smack和openfire通信的简单例子

阅读更多

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

 

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

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

目录接口如下:

 

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

 

创建一个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(){

			@Override
			public void processPacket(Packet arg0) {
				System.out.println(arg0);
			}
			
		}, new PacketFilter(){

			@Override
			public boolean accept(Packet arg0) {
				return true;
			}
			
		});
		
		IQ iq = new IQ(){
			@Override
			public 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领域的服务器推送。推动就那些吧,推推拉拉的。

  • 大小: 11.8 KB
3
0
分享到:
评论
2 楼 bluky999 2011-08-19  
smack 主要用来开发XMPP客户端 
openfire则是XMPP协议的XMPP服务器嘛 
1 楼 wearebug 2011-06-23  
smack是XMPP协议的实现,封装了大部分操作,用起来就很简单了。

相关推荐

Global site tag (gtag.js) - Google Analytics