Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用smack API发送和接收消息_Java_Xmpp_Openfire_Smack - Fatal编程技术网

Java 使用smack API发送和接收消息

Java 使用smack API发送和接收消息,java,xmpp,openfire,smack,Java,Xmpp,Openfire,Smack,我已经在本地机器上用两个用户testuser1和testuser2设置了我的OpenFire(jabber服务器)。使用Spark客户端,两个用户都可以进行聊天,没有任何问题,这很好 openfire IP-192.168.1.65 我想使用smack API(3.3.0)来发送和接收消息。我编写了发送方代码来发送消息(使用testuser1),并使用Spark客户端(使用testuser2)测试了testuser2端接收到的消息,但当我尝试使用java代码来接收发送方消息时,我无法接收这些发布

我已经在本地机器上用两个用户testuser1和testuser2设置了我的OpenFire(jabber服务器)。使用Spark客户端,两个用户都可以进行聊天,没有任何问题,这很好

openfire IP-192.168.1.65

我想使用smack API(3.3.0)来发送和接收消息。我编写了发送方代码来发送消息(使用testuser1),并使用Spark客户端(使用testuser2)测试了testuser2端接收到的消息,但当我尝试使用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("testuser2@sameek", 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);
    }





    }

}
  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("testuser1@sameek", 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);
    }





    }

}
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 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("testuser2@sameek", 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);
    }





    }

}
  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("testuser1@sameek", 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);
    }





    }

}
如果我采用了错误的方法,请帮助我并提出建议


谢谢

您正在创建一个聊天室,并从两端发送聊天信息,但没有收听任何一方的聊天。使用ChatManager侦听器来侦听来自其他客户端的传入聊天。

在遵循此处的教程()之后,我遇到了类似的问题,我发现:

当您创建聊天时,您可以与您想要连接的用户聊天(例如在我的情况下)user1@gbd038"). 如果user1正在使用诸如Spark之类的GUI客户机(该客户机可能对此具有内置支持和/或错误处理),并且user1将收到消息,那么这种方法就可以正常工作。此过程将messageListener附加到现在与“”关联的聊天user1@gbd038". 然而,当我以用户1的身份从Spark回复时,smack收到的聊天实际上是通过位置标签完成的,例如:

Received message 'hi' from user1@gbd038/Spark 2.6.3
因此,它会创建一个应用程序未侦听的新聊天(因此您的应用程序将不会接收/打印)。我找到了两种解决这个问题的方法:

  • 在开始对话时使用位置标记(尽管这看起来不是很好扩展或健壮):

    xmppManager.sendMessage(“你好,伙计,”user1@gbd038/Spark 2.6.3“

  • 正如Robin所建议的,使用ChatManagerListener(当收到user1的回复时,它将创建一个新的聊天,该回复可以转发到messageListener):


  • 希望能帮助处于相同位置的人

    使用下面的代码发送和接收消息

    @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");
    
    有关完整的代码示例,请访问