您好,老师,为什么我用smack写的android客户端老是断开,服务器发送过来的消息老是收不到。

客户端与openfire断开有很多可能,我们这里只分析其中一个。简单来说,我们目前的网络是很不稳定的,特别是移动互联网,上个厕所(在一个狭窄的空间中),有可能我们的网络就断线了。由于在网络断线前,客户端根本没有机会告诉服务器,客户端已经断线了,所以服务器端对于这个用户的状态依然是在线,这样就会导致很多问题。

所以需要客户端或者服务器定时的向对方发送心跳包,简单来说,其实心跳包就是一个空消息。 通过发送心跳包,这样服务器才知道客户端目前的状态。到底是服务器向客户端发送心跳包,还是客户端向服务器发送心跳包,哪个效率更高,这是另一个问题,就不在这里分析了。

所以需要客户端或者服务器定时的向对方发送心跳包,简单来说,其实心跳包就是一个空消息。 通过发送心跳包,这样服务器才知道客户端目前的状态。到底是服务器向客户端发送心跳包,还是客户端向服务器发送心跳包,哪个效率更高,这是另一个问题,就不在这里分析了。

总结起来,心跳包,就是让链接长时间保持的一种方式,如果你的程序经常断线,不妨分析一下是不是这个原因。