我有一段Java代码,它建立了一个长期的socket连接以监视家庭自动化设备的活动/事件。问题是,如果设备重新启动或断电,Java代码应尽快自动重新连接。有什么想法可以在Java端检测到连接中断,最好不需要定期轮询设备?
我已经解决了这个完全相同的问题。
如果你想要更早地捕获这个问题——并且你可以保证设备在一定时间内会响应,那么就在套接字上设置一个超时。如果这样做,如果设备没有响应,你将得到一个SocketTimeoutException,然后你可以关闭套接字并尝试重新打开套接字。我已经成功地使用了这个方法。
引用自上文:
我让它关闭套接字,然后尝试重新打开它,这段代码运行得很好。唯一的问题是,一旦我关闭了一个套接字,我就无法重新打开它,我会得到套接字已关闭的异常。这种情况每次都发生。如何关闭套接字,然后重新打开它而不出现这个异常?