Java 使用smack API发送和接收消息
我已经在本地机器上用两个用户testuser1和testuser2设置了我的OpenFire(jabber服务器)。使用Spark客户端,两个用户都可以进行聊天,没有任何问题,这很好 openfire IP-192.168.1.65 我想使用smack API(3.3.0)来发送和接收消息。我编写了发送方代码来发送消息(使用testuser1),并使用Spark客户端(使用testuser2)测试了testuser2端接收到的消息,但当我尝试使用java代码来接收发送方消息时,我无法接收这些发布消息 Sender.javaJava 使用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代码来接收发送方消息时,我无法接收这些发布
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“代码>
希望能帮助处于相同位置的人 使用下面的代码发送和接收消息
@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");
有关完整的代码示例,请访问