远程应用程序强制关闭后,检测套接字关闭

时间:2015-02-12 17:33:11

标签: java sockets

我在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何时关闭?

1 个答案:

答案 0 :(得分:5)

socket.isClosed()返回true的唯一方法是,如果你自称socket.close(),因为它是布尔值设置为true的唯一部分。

您可以做的只是尝试使用socketinputStream读取,如果已关闭,则会返回-1(如果已到达流的末尾)。

有关详细信息,请参阅documentation