【发布时间】:2014-11-11 00:27:17
【问题描述】:
我正在使用 xmpp 开发一个聊天应用程序,根据我们的要求,我们有三台服务器 Apache Tomcat 7,ejabbered 2.1.11 和 mysql 5.5,
to run xmppbot on tomcat used below library
-Smack-core-4.0.3.jar
-smack-tcp-4.0.3.jar
-xlightweb2.5.jar
-xpp3-1.1.3.3.jar
-xSocket-2.4.6.jar
使用上面的库,我可以与 ejabberd 连接,并能够使用我的登录 ID 和密码登录,但在登录一段时间后,连接会自动关闭,并且正在低于堆栈跟踪
Sep 16, 2014 4:36:01 PM org.jivesoftware.smack.XMPPConnection callConnectionClosedOnErrorListener
WARNING: Connection closed with error
java.io.EOFException: no more data available - expected end tag </stream:stream> to close start tag <stream:stream> from line 1, parser stopped on END_TAG seen ...</text></error></iq>... @1:1347
at org.xmlpull.mxp1.MXParser.fillBuf(MXParser.java:2919)
at org.xmlpull.mxp1.MXParser.more(MXParser.java:2928)
at org.xmlpull.mxp1.MXParser.nextImpl(MXParser.java:1112)
at org.xmlpull.mxp1.MXParser.next(MXParser.java:1061)
at org.jivesoftware.smack.tcp.PacketReader.parsePackets(PacketReader.java:279)
at org.jivesoftware.smack.tcp.PacketReader.access$000(PacketReader.java:47)
at org.jivesoftware.smack.tcp.PacketReader$1.run(PacketReader.java:81)
Sep 16, 2014 4:37:15 PM org.jivesoftware.smack.XMPPConnection callConnectionClosedOnErrorListener
WARNING: Connection closed with error
java.io.EOFException: no more data available - expected end tag </stream:stream> to close start tag <stream:stream> from line 1, parser stopped on END_TAG seen ...</text></error></iq>... @1:1347
at org.xmlpull.mxp1.MXParser.fillBuf(MXParser.java:2919)
at org.xmlpull.mxp1.MXParser.more(MXParser.java:2928)
at org.xmlpull.mxp1.MXParser.nextImpl(MXParser.java:1112)
at org.xmlpull.mxp1.MXParser.next(MXParser.java:1061)
at org.jivesoftware.smack.tcp.PacketReader.parsePackets(PacketReader.java:279)
at org.jivesoftware.smack.tcp.PacketReader.access$000(PacketReader.java:47)
at org.jivesoftware.smack.tcp.PacketReader$1.run(PacketReader.java:81)
以上消息在我的 Eclipse 控制台中不断循环重复!!!
谁能解释一下
- 出现上述错误的原因是什么?
- 如何解决上述错误?
提前致谢!!!
【问题讨论】:
-
你有没有想过这个问题?我有同样的问题。
-
在我的用例中,出现上述错误的原因是 jabber 服务器(ejabberd)在固定时间间隔后断开连接,因为当连接理想时,所以我所做的是在完成任务后说发送聊天消息我正在断开 xmpp 连接[我的用例是我从运行在 Tomcat7 应用程序服务器上的 servlet 创建 xmpp 连接] 这是一种解决方案,另一种是 @Flow 提到的,您可以在创建的 xmpp 连接对象上放置一个连接侦听器,它会监听连接 Closed With Error,你可以尝试重新连接到 xmpp 服务器!
-
我在 ejabberd 方面没有经验,但 this answer 可能会对您有所帮助。
标签: java ejabberd smack asmack