2016-07-28 190 views
2

我与XMPPTCPConnection工作与我的Openfire服务器的连接成功,发送连接/成功接收的数据包。连接保持稳定,但突然下降,例外,我不知道这个例外。 我的服务器断开闲置用户时间为60秒。我已经实现了所有的ping管理器和重新连接代码。所以它重新连接,但不知道为什么它与异常断开连接或如何解决此异常。XMPP与Openfire的客户端连接suddently失去了咂嘴4.1

E/MainService: Connection to XMPP server was lost.org.jivesoftware.smack.SmackException: Parser got END_DOCUMENT event. This could happen e.g. if the server closed the connection without sending a closing stream element 
07-28 10:21:22.003 12719-16068/com.thatsit.android D/SMACK: 
XMPPConnection closed due to an exception (0) 
07-28 10:21:22.003 12719-16068/com.thatsit.android W/System.err: org.jivesoftware.smack.SmackException: Parser got END_DOCUMENT event. This could happen e.g. if the server closed the connection without sending a closing stream element 

07-28 10:21:22.003 12719-16068/com.thatsit.android W/System.err:  at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.parsePackets(XMPPTCPConnection.java:1170) 

07-28 10:21:22.003 12719-16068/com.thatsit.android W/System.err:  at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.access$300(XMPPTCPConnection.java:952) 
07-28 10:21:22.003 12719-16068/com.thatsit.android W/System.err:  at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader$1.run(XMPPTCPConnection.java:967) 
07-28 10:21:22.013 12719-16068/com.thatsit.android W/System.err:  at java.lang.Thread.run(Thread.java:818) 

任何帮助将不胜感激。

回答

0

有没有必要断开理想的用户。

如果您再次断开连接,然后做出了在后台运行服务,并检查XMPP连接每10秒。如果连那么就没有必要连接,但如果断开连接,然后再次连接到服务器。我从我的应用程序处理了这个。

我有github也开放源代码。如果你想,那么你可以从那里参考。

这不更新的代码为4.1,但我已经做出更改,但需要上传。今天晚上我会上传更新的代码。

感谢,希望这将有助于解决您的问题。

0

其实有涉及到你的两个问题:一个是Openfire的4.x.x,一个是在拍击4.0.7库。

在Openfire 4.x.x及更高版本中存在一个错误(OF-1308),当服务器断开客户端时,它不会将流的结束标记作为有意断开连接发送给客户端。它只是关闭套接字并导致PacketReader获得END_DOC事件。

在Smack中,PacketReader处理IOException(意外丢失网络连接),流的终止标记(故意断开连接)或END_DOC(意外断开与服务器的意外断开连接,例如服务器崩溃)。获取IOException将触发重新连接管理器已启用。获取流的结束标记将触发正常的连接关闭事件。但是,Smack将END_DOC视为获取流的结束标记。在我看来,Smack应该将END_DOC视为IOException,因为没有收到流的结束标记。

还有一个转折点。如果启用了压缩,则如果服务器只关闭套接字,则PacketReader会得到IOException。如果压缩被禁用,则如果服务器简单地关闭套接字,则PacketReader将获得END_DOC。

在您的情况下,当启用了空闲超时时,客户端不应触发重新连接管理器。否则,它会破坏空闲超时的目的。我正在测试我的修复程序,因此我还没有向Ignite社区报告Smack错误。