2013-08-24 15 views
9

2人のユーザーtestuser1とtestuser2を使用してローカルマシンにオープンファイア(ジャバーサーバー)を設定しました。スパーククライアント両方のユーザーが問題なくチャットを行います。smack APIを使用してメッセージを送受信する

openfire IP -192.168.1.65

私は、送信および受信メッセージのためにピシャリとAPI(3.3.0)を使用します。私はtestuser1側でメッセージを送信するために送信側のコードを書き、testuser2側で受信したSparkクライアントでテストしましたが、送信者メッセージを受け取るJavaコードを試してみると、それらのメッセージを受け取ることができません。

Sender.java

import org.jivesoftware.smack.Chat; 
import org.jivesoftware.smack.XMPPConnection; 
import org.jivesoftware.smack.XMPPException; 
import org.jivesoftware.smack.packet.Message; 
import org.jivesoftware.smack.MessageListener; 

public class Sender 
{ 

    public static void main(String a[]) throws XMPPException, InterruptedException 
    { 
     XMPPConnection connection = new XMPPConnection("192.168.1.65"); 
     System.out.println(connection); 
     connection.connect(); 
     connection.login("testuser1", "test123"); 



     Chat chat = connection.getChatManager().createChat("[email protected]", new MessageListener() { 

      public void processMessage(Chat chat, Message message) { 
       // Print out any messages we get back to standard out. 
       System.out.println("Received message: " + message); 
      } 
     }); 
     chat.sendMessage("Howdy test1!"); 

     while (true) { 
     Thread.sleep(50); 
    } 





    } 

} 

Receiver.java

import org.jivesoftware.smack.Chat; 
import org.jivesoftware.smack.XMPPConnection; 
import org.jivesoftware.smack.XMPPException; 
import org.jivesoftware.smack.packet.Message; 
import org.jivesoftware.smack.MessageListener; 






public class Receiver 
{ 

    public static void main(String a[]) throws XMPPException,, InterruptedException 
    { 
     XMPPConnection connection = new XMPPConnection("192.168.1.65"); 
     System.out.println(connection); 
     connection.connect(); 
     connection.login("testuser2", "test123"); 



     Chat chat = connection.getChatManager().createChat("[email protected]", new MessageListener() { 

      public void processMessage(Chat chat, Message message) { 
       // Print out any messages we get back to standard out. 
       System.out.println("Received message: " + message); 
      } 
     }); 
     chat.sendMessage("Howdy test2!"); 

     while (true) { 
     Thread.sleep(50); 
    } 





    } 

} 

私を助け、私は間違ったアプローチを、以下のいた場合に提案してください。

おかげ

答えて

1

あなたがチャットを作成し、両端からチャットメッセージを送信するが、どちらかからチャットをリッスンしていません。 ChatManagerListenerを使用して、他のクライアントからの着信チャットを待ち受けます。

16

私は(http://www.javacodegeeks.com/2010/09/xmpp-im-with-smack-for-java.html)ここではチュートリアルに従った後、同様の問題があったし、これは私が見つけたものです:あなたがチャットを作成するとき、あなたは私の場合(例えば、接続するユーザーを

チャット」 user1 @ gbd038 ")。これは、user1がSparkなどのGUIクライアントを使用している場合(これには組み込みのサポートやエラー処理が含まれていると思われます)、user1はメッセージを受け取ります。このプロセスは、 "user1 @ gbd038"に関連付けられたチャットにmessageListenerを添付します。しかし、私はUSER1としてスパークから返信するとき、受信ピシャリチャットが実際に例えば、ロケーションタグで完全を通じて来ている:

Received message 'hi' from [email protected]/Spark 2.6.3 

だから、アプリケーションがためにリスニング(したがってされていないことを新しいチャットを作成しますあなたのアプリケーションは受信/プリントアウトされません)。私はこの問題を解決するための二つの方法を発見した:

  1. を会話を開始するとき(これは非常にスケーラブルや堅牢ないないようだが)ロケーションタグを使用します。ロビンとして

    xmppManager.sendMessage("Hello mate", "[email protected]/Spark 2.6.3");

  2. を提案するChatManagerListenerを使用してください(user1からの返信を受信すると新しいチャットが作成され、messageListenerに転送できます)。

    chatManager = connection.getChatManager(); 
    messageListener = new MyMessageListener(); 
    
    chatManagerListener = new ChatManagerListener() { 
        @Override 
        public void chatCreated(Chat chat, boolean createdLocally) { 
         chat.addMessageListener(messageListener); 
        } 
    }; 
    chatManager.addChatListener(chatManagerListener); 
    

同じポジションにいる人を助ける希望!

+1

を訪問する第2の解決策は、のために多くの偉大なソリューションのおかげで働きました。 – Andy

0

メッセージを送受信するためのコードの下に使用

@Override 
     public void processMessage(Chat chat, Message message) { 
      // Print out any messages we get back to standard out. 
      System.out.println("Received message: " + message); 
     } 

    }); 

chat.sendMessage("How are you dear !!"); 
System.out.println(" Send Message succesfully"); 

完全なコード例についてはHow to send message using smack api

関連する問題