我在Java套接字方面遇到了一些麻烦。
我有一对在它们之间建立连接的应用程序(一个打开ServerSocket
,调用accept()
并等待,另一个通过Socket(InetAddress,int)
构造函数连接。
建立套接字连接后,使用此Thread
创建Runnable
。
public void run() {
System.out.print("Watching Socket for closing ");
while(running) {
if(socket.isClosed()) {
System.out.println("Socket has been closed");
break;
}
}
this.running = false;
//safely ends this application by closing i/o and exiting.
}
我的问题是,当其中一个应用程序意外关闭时(在我的情况下从Eclipse终止),调用Socket.isClosed()
仍然显示套接字已打开,因此循环保持运行,就好像Socket已打开一样。 / p>
当另一方的Java应用程序被强制结束时,如何检测Socket何时关闭?
答案 0 :(得分:5)
socket.isClosed()
返回true的唯一方法是,如果你自称socket.close()
,因为它是布尔值设置为true
的唯一部分。
您可以做的只是尝试使用socket
从inputStream
读取,如果已关闭,则会返回-1(如果已到达流的末尾)。
有关详细信息,请参阅documentation。