在实施基于GCM XMPP的App Server时,无法将XMPP服务器与smack:EOFexception连接

java.io.EOFException: no more data available - expected end tag  to close start tag  from line 1, parser stopped on END_TAG seen ...... @1:344 at org.xmlpull.mxp1.MXParser.fillBuf(MXParser.java:3035) at org.xmlpull.mxp1.MXParser.more(MXParser.java:3046) at org.xmlpull.mxp1.MXParser.nextImpl(MXParser.java:1144) at org.xmlpull.mxp1.MXParser.next(MXParser.java:1093) at org.jivesoftware.smack.PacketReader.parsePackets(PacketReader.java:279) at org.jivesoftware.smack.PacketReader.access$000(PacketReader.java:44) at org.jivesoftware.smack.PacketReader$1.run(PacketReader.java:70) 

//资源: https : //developer.android.com/google/gcm/ccs.html#implement

我已经尝试了在android网站上给出的确切代码,但它正在抛出文件exception结束,我认为这是MXParser中的一些错误(虽然不太确定)。 如果smack XMPP库是问题,是否有任何其他xmpp库可以用于GCM CCS? 任何人都可以帮我解决这个问题。 在下图中,您可以看到结束流标记未关闭,但这是我收到数据包的方式。

发送和接收数据包输出窗口:

发送数据包

收到包

出于某种原因,我重新启动了机器并自行修复

这里描述了一个可能的原因:

您需要发送一些心跳 – 无论是在XMPP还是TCP级别 – 因此您的端点可以检测(或阻止)关闭的TCP。 许多路由器/ NAT无法发送RST或FIN,只是丢弃TCP连接。

例如,您可以使用PingManager ( smack-extensions )来实现这样的心跳。