Smack API,connect() 异常

Posted

技术标签:

【中文标题】Smack API,connect() 异常【英文标题】:Smack API, connect() exception 【发布时间】:2012-02-07 20:25:34 【问题描述】:

我正在尝试连接到我的公司 XMPPServer 并收到以下异常:

java.io.EOFException: input contained no data
at org.xmlpull.mxp1.MXParser.fillBuf(MXParser.java:3003)
at org.xmlpull.mxp1.MXParser.more(MXParser.java:3046)
at org.xmlpull.mxp1.MXParser.parseProlog(MXParser.java:1410)
at org.xmlpull.mxp1.MXParser.nextImpl(MXParser.java:1395)
at org.xmlpull.mxp1.MXParser.next(MXParser.java:1093)
at org.jivesoftware.smack.PacketReader.parsePackets(PacketReader.java:325)
at org.jivesoftware.smack.PacketReader.access$000(PacketReader.java:43)
at org.jivesoftware.smack.PacketReader$1.run(PacketReader.java:70)

我的代码真的很基础...

System.setProperty("smack.debugEnabled", "true");
XMPPConnection.DEBUG_ENABLED = true;
ConnectionConfiguration config = new ConnectionConfiguration("xxx", 5223);
config.setSecurityMode(SecurityMode.enabled);
config.setSASLAuthenticationEnabled(true);
config.setDebuggerEnabled(true);
config.setCompressionEnabled(false);
XMPPConnection connection = new XMPPConnection(config);
connection.connect();

我做错了什么? Smack Debug 窗口中的“Raw Sent Packets”似乎显示了正确的 xml 流:

<stream:stream to="xxx" xmlns="jabber:client" xmlns:stream="http://etherx.jabber.org/streams" version="1.0">
<presence id="3347O-0" type="unavailable"></presence>
</stream:stream>

---- 更新----

我找到了问题。 对于 SSL 连接,需要以下代码:

config.setSecurityMode(ConnectionConfiguration.SecurityMode.enabled);
config.setSocketFactory(new DummySSLSocketFactory());

DummySSLSocketFactory 类可以在 Spark 中找到,也可以直接在此处找到:

http://svn.igniterealtime.org/svn/repos/spark/trunk/src/java/org/jivesoftware/spark/util/DummySSLSocketFactory.java

【问题讨论】:

如果您找到了问题的解决方案,请将其发布为答案,而不是更新您的问题。 这是因为我在不到 8 小时的时间内找到了解决问题的方法……它不允许我立即发布答案。 【参考方案1】:

我找到了问题。 对于 SSL 连接,需要以下代码:

config.setSecurityMode(ConnectionConfiguration.SecurityMode.enabled);
config.setSocketFactory(new DummySSLSocketFactory());

您可以使用DummySSL class,也可以在 Spark 中找到。

【讨论】:

以上是关于Smack API,connect() 异常的主要内容,如果未能解决你的问题,请参考以下文章

使用 Smack 在 ejabberd 上创建用户时出现异常

Smack API 抛出 item-not-found(404) 异常

Smack 连接到服务器失败

con't login: connect to api.github.com:443[api.github.com/192.30.253.116, api.github.com/192.30.

NoClassDefFoundError: org.jivesoftware.smack.tcp.XMPPTCPConnectionConfiguration only API 19

如何在使用 Smack 发送聊天时检测错误