XMPP Java 客户端 - 未连接到服务器
Posted
技术标签:
【中文标题】XMPP Java 客户端 - 未连接到服务器【英文标题】:XMPP Java client - Not connected to server 【发布时间】:2014-04-18 08:33:22 【问题描述】:我的 XMPP Java 客户端有问题。
我有一个 XMPP 服务器(基于 Ejabberd,10.30.16.147)和两个 Pidgin 用户:test1@localhost(在我的 Windows 机器上,10.30.16.199)和 test2@locahost(在 Linux 服务器机器上,10.30.16.147) .
当我使用两个 Pidgin 客户端时,聊天工作正常。 现在我正在尝试创建一个 Java 客户端来模拟两个 Pidgin 客户端之一。代码如下(我已经在我的 Eclipse 项目中导入了 Smack 3.4.1 库):
package test2XMPP;
import org.jivesoftware.smack.Chat;
import org.jivesoftware.smack.ConnectionConfiguration;
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
ConnectionConfiguration config = new ConnectionConfiguration("10.30.16.147", 5222);
XMPPConnection connection = new XMPPConnection(config);
connection.connect();
connection.login("test1@locahost", "test1");
Chat chat = connection.getChatManager().createChat("test2@localhost", new MessageListener()
public void processMessage(Chat chat, Message message)
System.out.println("Received message: " + message);
);
chat.sendMessage("Howdy test1!");
while (true)
Thread.sleep(50);
我得到以下控制台输出:
apr 18, 2014 10:19:37 AM org.jivesoftware.smack.provider.UrlProviderFileInitializer initialize
INFO: Loading providers for file [classpath:META-INF/core.providers]
apr 18, 2014 10:19:37 AM org.jivesoftware.smack.provider.UrlProviderFileInitializer initialize
INFO: Loading providers for file [classpath:META-INF/extension.providers]
Exception in thread "main" java.lang.IllegalStateException: Not connected to server.
at org.jivesoftware.smack.XMPPConnection.login(XMPPConnection.java:230)
at org.jivesoftware.smack.Connection.login(Connection.java:368)
at test2XMPP.Sender.main(Sender.java:18)
如果我已经与我的 Pidgin test1@localhost 客户端断开连接,我也会收到这些错误。
你有什么建议吗? 谢谢
【问题讨论】:
【参考方案1】:使用new ConnectionConfiguration("10.30.16.147", 5222, "localhost");
和connection.login("test1", "test1");
【讨论】:
【参考方案2】:有类似的经历,问题是主机名和域名不同。 我使用的是 ConnectionConfiguration 类的单参数构造函数。
ConnectionConfiguration config = new ConnectionConfiguration(hostname);
只需要识别安装 Ejabberd 的机器的主机名并确保它们都相同,以便客户端进行通信。
【讨论】:
以上是关于XMPP Java 客户端 - 未连接到服务器的主要内容,如果未能解决你的问题,请参考以下文章
设置 Redis cookie 时,Apollo 客户端未连接到服务器
如果已经连接了相同的 JID,XMPP 客户端可以连接到服务器吗?