【问题标题】:How Can I create,send and receive iq packets using smack(java)如何使用 smack(java) 创建、发送和接收 iq 数据包
【发布时间】:2010-01-28 04:49:07
【问题描述】:

我已连接到服务器(Xmpp) 但无法在我的 psi 客户端发送和接收数据包

这是我的代码的 sn-p

POSClientIQ posclientiq = new POSClientIQ();
    posclientiq.connectXMPPServer();
    posclientiq.processMessage();
   }

   public void processMessage()
   {  try{

      final  IQ iq1 = new IQ() {
     public String getChildElementXML() {
      return "<iq type='get' from ='sam'><query xmlns='jabber:iq:roster'></query></iq>";
    }
  };

  iq1.setType(IQ.Type.GET);
 // PacketCollector collector = connection.createPacketCollector(new PacketIDFilter(iq1.getPacketID()));
  connection.sendPacket(iq1);

  System.out.println("Message send");

【问题讨论】:

    标签: java xmpp smack


    【解决方案1】:

    getChildElementXML() 返回标签。如果您使用的是 Smack,那么您不需要编写自己的 IQ 实现,除非它是自定义查询。对于您的情况,查询名册使用RosterPacket

    【讨论】:

      【解决方案2】:

      如果您有自定义查询并且想要使用您的 IQ 实现,那么:

      final IQ iq = new IQ() {
      public String getChildElementXML() { 
      return "<query xmlns='http://jabber.org/protocol/disco#info'/>"; // here is your query
      //this returns "<iq type='get' from='User@YourServer/Resource' id='info1'> <query xmlns='http://jabber.org/protocol/disco#info'/></iq>";
       }};
      // set the type
      iq.setType(IQ.Type.GET);
      // send the request
      connection.sendPacket(iq); 
      

      如您所见,这里有您的自定义查询,并且您使用 Smack 设置您的 IQ 的其余部分,例如设置类型。请注意,Smack 会根据您登录的 JID 为您填写“发件人”。

      【讨论】:

      • 我怎样才能得到这个原始查询的响应?我无法从中得到任何回应
      【解决方案3】:
      //To retrieve archive msges from server..
      
      MyCustomIQ iq = new MyCustomIQ();
            iq.setType(IQ.Type.set);
           mConnection.sendIqWithResponseCallback(iq, new PacketListener() {
                      @Override
                      public void processPacket(Packet packet) throws SmackException.NotConnectedException {
                          Log.i("Send IQ with Response", "****** message " + packet);
                      }
                  }, new ExceptionCallback() {
                      @Override
                      public void processException(Exception exception) {
                        exception.printStackTrace();
                          Log.i("IO archjieve Exception",""+ exception.getMessage());
                      }
                  }, 5000);
      
            mConnection.sendPacket(new Presence(Presence.Type.available));
                  PacketTypeFilter filter=new PacketTypeFilter(org.jivesoftware.smack.packet.Message.class);
                  PacketListener myListener=new PacketListener(){
                      public void processPacket(Packet packet){
                         if(((Message) packet).getType().equals(Message.Type.chat))
                          {
                              ((Message) packet).getBody();
                          }
                          else if(((Message) packet).getType().equals(Message.Type.normal))
                          {
                              DefaultPacketExtension pacExten=PacketUtil.packetExtensionfromCollection(packet.getExtensions(), "result", "urn:xmpp:mam:0");
                              String strMsg=pacExten.getValue("body");
                          }
                      }
                  }
                   ;
                 mConnection.addPacketListener(myListener, filter);
      
      
          //My Custom IQ
          class MyCustomIQ extends IQ {
      
                  String token;
      
      
                  protected MyCustomIQ() {
                  super("query","urn:xmpp:mam:0");
                  }
      
      
      
                  @Override
                  protected IQChildElementXmlStringBuilder getIQChildElementBuilder(IQChildElementXmlStringBuilder xml) {
          //  String queryId = prefix + Long.toString(new AtomicLong().incrementAndGet());
                      xml.attribute("queryid",queryId);
                      xml.rightAngleBracket();
                      return xml;
                  }
      
      
              }
      
      
      //You may get the response in PacketListerener sometimes so put debug in that also
      

      【讨论】:

      • 我如何发送这个 推送模式下的短信falseapplepushDeviceTokenapplication1
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-21
      • 2014-04-16
      • 1970-01-01
      • 2013-08-27
      • 2013-05-08
      • 2014-06-09
      • 1970-01-01
      相关资源
      最近更新 更多