我想知道一个 Java TCP Socket 是否当前已连接,下面的方法似乎只能告诉我这个 socket 是否曾经连接过,而不能确定它是否仍然连接着。
socket.isConnected();
希望能得到任何帮助,谢谢。
假设您对协议有一定的控制权,我强烈建议发送心跳来验证连接是否活动。这已被证明是最可靠的方法,通常可以在连接断开时最快地通知您。
TCP保持连接的方式也可以使用,但如果远程主机突然断电怎么办?TCP可能需要很长时间才能超时。另一方面,如果您的应用程序中有逻辑期望每隔x秒获得心跳回复,则第一次未收到回复,您就会知道连接不再工作,可能是远程端的网络或服务器问题。
更多讨论,请参见Do I need to heartbeat to keep a TCP connection open?。