4

サーバー (Xmpp) に接続していますが、psi クライアントでパケットを送受信できません

ここに私のコードのスニペットがあります

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");
4

3 に答える 3

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 に基づいて "from" を入力することに注意してください。

于 2012-02-15T10:22:45.160 に答える
2

getChildElementXML() はタグを返します。Smack を使用している場合、カスタム クエリでない限り、独自の IQ 実装を記述する必要はありません。あなたの場合、名簿を照会するには、RosterPacketを使用します。

于 2010-04-08T13:17:40.427 に答える