openfire ping的smack解决方案(维持在线状态)

连接中关联如下:

Java代码  收藏代码
  1.              // iq提供者  
  2. roviderManager.getInstance().addIQProvider("ping", "urn:xmpp:ping",  
  3.     new PingIQProvider());  
  4. onnection.addPacketListener(new PacketListener() {  
  5.   
  6. @Override  
  7. public void processPacket(Packet p) {  
  8.     PingIQ pingIQ = (PingIQ) p;  
  9.     IQ pongIQ = pingIQ.createResultIQ(pingIQ);  
  10.     // 返回  
  11.     connection.sendPacket(pongIQ);  
  12.   
  13. }  
  14. new PacketTypeFilter(PingIQ.class));  

两个关联类,PingIQ,PingIQProvider

Java代码  收藏代码
  1. import org.jivesoftware.smack.packet.IQ;  
  2.   
  3. public class PingIQ extends IQ {  
  4.   
  5.     public static final String ELEMENT = "ping";  
  6.     public static final String NAMESPACE = "urn:xmpp:ping";  
  7.   
  8.     @Override  
  9.     public String getChildElementXML() {  
  10.         StringBuffer sb = new StringBuffer();  
  11.         sb.append("<").append(ELEMENT).append(" xmlns="").append(NAMESPACE)  
  12.                 .append("">");  
  13.   
  14.         sb.append("</").append(ELEMENT).append(">");  
  15.         return sb.toString();  
  16.   
  17.     }  
  18.   
  19. }  
Java代码  收藏代码
  1. import org.jivesoftware.smack.packet.IQ;  
  2. import org.jivesoftware.smack.provider.IQProvider;  
  3. import org.xmlpull.v1.XmlPullParser;  
  4.   
  5. public class PingIQProvider implements IQProvider {  
  6.   
  7.     @Override  
  8.     public IQ parseIQ(XmlPullParser parser) throws Exception {  
  9.         // TODO Auto-generated method stub  
  10.         PingIQ iq = new PingIQ();  
  11.         return iq;  
  12.     }  
  13.   
  14. }  

报文如下: 

Java代码  收藏代码
    1. <iq xmlns="jabber:client" type="get" id="65dfds" from="localhost" to="test001@xmpp.qxun.org/test"><ping xmlns="urn:xmpp:ping"/></iq>  
    2.   
    3.   
    4. <iq type="result" to="localhost" id="65dfds"/> 

http://linyu19872008.iteye.com/blog/1840596

原文地址:https://www.cnblogs.com/tiancai/p/10070319.html