断开连接时重新连接Java套接字连接

6 java sockets

我有Java代码,它与家庭自动化设备建立长期套接字连接,以监控它的活动/事件.问题是如果重启设备或重启电源,Java代码应该尽快自动重新连接.有关如何检测Java端连接断开的任何想法,最好不要定期轮询设备?

Edd*_*die 3

如果设备在没有正确关闭套接字的情况下重新启动,我不知道有什么可以让您检测到它。在这种情况下,您的服务器将无法检测到套接字已消失,除非设备恢复正常或直到服务器上的 TCP/IP 堆栈放弃并声明连接已断开。在某些时候,您会收到“IOException. 您需要捕获该异常,然后在发生时重新连接”。

您确实受到 TCP/IP 行为的支配。当连接的一端完全消失(没有FIN数据包)时,另一端可能会等待任意长度的时间(取决于许多因素),然后才确定连接已死亡。

如果您想更早地发现这个问题——并且您可以保证设备将在设定的时间内做出响应,那么可以在套接字上设置超时。如果这样做,您将收到SocketTimeoutException“如果设备没有响应”,然后您可以关闭套接字并尝试重新打开套接字。我已经成功地使用了这个。