2013-08-24 16 views
9

Ho installato il mio fire fire (server jabber) sul computer locale con due useruseruser1 e testuser2 .using Spark client entrambi gli utenti eseguono chat senza alcun problema, è bello.inviare e ricevere messaggi utilizzando l'API smack

openfire IP -192.168.1.65

voglio usare API schiaffo (3.3.0) per l'invio e la ricezione di un messaggio. Ho il codice di invio del mittente per inviare un messaggio (con testuser1) e testato con il client Spark (con testuser2) ricevuto sul lato testuser2, ma quando provo con il codice java per ricevere il messaggio del mittente, non riesco a ricevere quei messaggi di pubblicazione.

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); 
    } 





    } 

} 

please help me e suggerire se sto seguendo un approccio sbagliato.

Grazie

risposta

1

si sta creando una chat e l'invio di un messaggio chat da entrambe le estremità, ma non ascoltare per una chat da entrambi. Utilizzare un ChatManagerListener per ascoltare le chat in arrivo da altri client.

16

Ho avuto un problema simile, dopo aver seguito il tutorial qui (http://www.javacodegeeks.com/2010/09/xmpp-im-with-smack-for-java.html) e questo è quello che ho trovato:

Quando si crea la chat, di chattare l'utente che si desidera connettersi (ad esempio nel mio caso " user1 @ gbd038"). Funziona bene se user1 sta usando un client GUI come Spark (che presumibilmente ha il supporto integrato e/o la gestione degli errori per questo), e user1 riceverà il messaggio. Questo processo collega il messageListener a una chat ora associata a "user1 @ gbd038". Tuttavia, quando ho risposta da Spark come user1, la chat che schiaffo riceve in realtà è venuta attraverso completo con il tag di percorso, ad esempio:

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

Così si crea una nuova chat che l'applicazione non è in ascolto per la (e quindi la tua applicazione non riceverà/stamperà). Ho trovato due modi per risolvere questo problema:

  1. uso del tag di percorso quando si inizia la conversazione (anche se questo non sembra molto scalabile e robusta):

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

  2. come Robin suggerito, utilizzare un ChatManagerListener (che creerà una nuova chat quando si riceve la risposta dall'utente1, che può essere inoltrata al messageListener):

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

Spero che aiuti qualcuno nella stessa posizione!

+1

Seconda soluzione ha lavorato per, grazie mille per la grande soluzione. – Andy

0

Usa sotto il codice per inviare e ricevere messaggi

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

Per il codice completo esempio visita How to send message using smack api

Problemi correlati