发送XMPP(Smack)消息

3

好的,这个问题应该很简单,但我无法彻底解决它。

我有两个用户A和B。

他们的JID(Jabber ID)分别为A@123和B@123,其中123是服务器的IP地址。

我使用以下代码从A发送消息到B:

   chat = chatmanager.createChat(username,
   new MessageListener() {
      public void processMessage(Chat chat, Message message) {}});
   String sendUsername = username + "@123";
   Message msgObj = new Message(sendUsername, Message.Type.chat);
   msgObj.setBody(message);

   chat.sendMessage(msgObj);

我已经硬编码了IP,这样我就可以100%确定在昵称末尾添加"@123",以避免出现错误的JIDs。

因此,A@123向B@123发送msgObj。这是我理解XMPP消息传递的方式。你不能从A->B发送,而必须是A@123 -> B@123。

然而,我的服务器似乎持有不同的观点。它不断告诉我以下错误:

 2010.12.27 19:02:52 [org.jivesoftware.openfire.session.LocalOutgoingServerSession
 .createOutgoingSession(LocalOutgoingServerSession.java:258)] Error trying to 
 connect to remote server: A(DNS lookup: A:5269) 
 java.net.UnknownHostException: A 

在Openfire服务器的A和B的名单中,他们将彼此作为联系人,并使用正确的JIDs(username@123)。
有人可以提供一些见解吗?我很迷茫。
编辑
我正在尝试使用Wireshark捕获发送到和从Openfire服务器接收到的XML,以确定消息的接收者是否被正确命名(A@123而不是A)。
在使用Wireshark时,我收到了以下传输的XML:
\302\3469\223\341\3429\000\000\000\000\377\377

我已经禁用了SSL,以不安全的方式连接。我不确定为什么我收到了SSL类型的XML,请问这是否正确?


这只能是由于您将某些内容发送到 A 而不是 A@123 导致的。检查您实际发送到服务器的 XML(如果 Smack/Openfire 没有提供流检查,则使用 Wireshark)。 - MattJ
听起来不错,马特。我之前没有想到过使用Wireshark。如果我硬编码了@IP,我就无法理解Smack如何发送到A。我会告诉你结果的。 - Adam
Wireshark没有提供任何相关信息。我认为这是因为我连接的是5222端口。它给我的XML是一系列数字,而不是实际的XML。不确定该如何解决这个问题。 - Adam
2个回答

3
原来这个问题的答案只是被忽略了。
在第一行代码中:
 chat = chatmanager.createChat(username, new MessageListener() {
            public void processMessage(Chat chat, Message message) {}
      });

我没有将变量"username"设置为正确的IP扩展名,所以它只是"A"而不是"A@123"。

将"sendUsername"移到顶部并将"username"更改为"sendUsername"可以使一切正常工作 :)

愚蠢的错误。


1

使用IP地址通常比你想象的更令人困惑。

很有可能你的OpenFire配置不正确,导致IP地址不是有效的主机名。进入管理控制台,在“系统属性”下,确保xmpp.domain属性设置为你的IP地址。


Joe,xmpp.domain设置为123(遵循我在示例中使用的相同IP系统),因此是正确的。 - Adam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接