socket.isConnected()无法检测到断开的套接字

vic*_*ico 1 java sockets

我有一个使用套接字连接到服务的Java应用程序。我一直希望从该套接字中收到一些信息,如果它断开连接,则需要重新连接。当我以正常方式从远程应用程序一侧关闭/打开套接字时,重新连接工作正常。但是,当远程应用程序被终止时,我的Java应用程序不会检测到该错误。我用以下命令运行线程:

if (socket.isConnected()) { /* code */ }
Run Code Online (Sandbox Code Playgroud)

该函数不会检测套接字被杀死的时间。为什么?如何检测到远程套接字被杀死?

注意:我必须使用Java 1.4

UPD

我确实从套接字输入流中读取逻辑信息:

 if (in.available()) {...}
Run Code Online (Sandbox Code Playgroud)

这无法检测到套接字已断开连接。in.read()即使没有可用数据来检测关闭的套接字,我也应该使用吗?

Kay*_*man 5

各种isXXX()方法Socket不会跟踪实际状态,但是会跟踪套接字的状态。例如,isConnected()即使套接字已关闭,即使在某个时候已连接,它也将返回true。

检测a 是否仍然有效的唯一方法Socket是尝试使用它,即对其进行读取或写入。如果引发异常,则需要清理并重新连接。