【问题标题】:java.io.EOFException: no more data available - expected end tag </stream:stream> to close start tag <stream:stream>java.io.EOFException:没有更多可用数据 - 预期结束标记 </stream:stream> 以关闭开始标记 <stream:stream>
【发布时间】: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 控制台中不断循环重复!!!

谁能解释一下

  1. 出现上述错误的原因是什么?
  2. 如何解决上述错误?

提前致谢!!!

【问题讨论】:

  • 你有没有想过这个问题?我有同样的问题。
  • 在我的用例中,出现上述错误的原因是 jabber 服务器(ejabberd)在固定时间间隔后断开连接,因为当连接理想时,所以我所做的是在完成任务后说发送聊天消息我正在断开 xmpp 连接[我的用例是我从运行在 Tomcat7 应用程序服务器上的 servlet 创建 xmpp 连接] 这是一种解决方案,另一种是 @Flow 提到的,您可以在创建的 xmpp 连接对象上放置一个连接侦听器,它会监听连接 Closed With Error,你可以尝试重新连接到 xmpp 服务器!
  • 我在 ejabberd 方面没有经验,但 this answer 可能会对您有所帮助。

标签: java ejabberd smack asmack


【解决方案1】:

您需要设置心跳(ping)间隔来克服空闲连接超时。超时不一定在应用程序中,它们可以在路径中的路由器/交换机中。在示例中,600 表示 10 分钟。

PingManager.getInstanceFor(connection).setPingInterval(600);

【讨论】:

    【解决方案2】:
    1. 出现上述错误的原因是什么?

    然后连接意外断开。例如因为服务器以不干净的方式关闭它。

    1. 如何解决上述错误?

    这可能有很多原因。您应该处理异常并重新建立连接。

    【讨论】:

    • Hiiii,我遇到了与 ejabberd 相同的问题。我们最近从 openfire 迁移到 ejabberd。我们在使用 openfire 时从未遇到过这个问题。知道在哪里看。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多