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领域的服务器推送。推动就那些吧,推推拉拉的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值