关闭ServerSocket - 如何正确检查客户端套接字是否已关闭?

时间:2011-02-15 17:03:40

标签: java sockets

我创建了一个运行以下代码的新线程:

public static void startServer() throws IOException {
    serverSocket = new ServerSocket(55000);
    Socket clientSocket = serverSocket.accept(); 
}

以上代码在一个线程中运行。现在,在我的主类中,我成功创建了一个套接字 连接到服务器,我检查了它的完整性,这很好。这是代码:

Socket testServerSocket = new Socket("127.0.0.1", 55000);
assertEquals("/127.0.0.1", testServerSocket.getInetAddress().toString());
assertEquals(55000, testServerSocket.getPort());

这完美无缺。然后,再次从我的主要,我杀死关闭服务器端连接的服务器连接。但是,以下代码仍然失败: assertEquals(false,testServerSocket.isBound());

它一直回归真实。同样,如果我检查连接的远程IP地址,它不会返回null,而是返回'/127.0.0.1'。任何想法为什么会这样?非常感谢您的帮助

1 个答案:

答案 0 :(得分:1)

我不是套接字方面的专家(我知道它们是什么,但是在Java上没有使用套接字,只在Linux上使用C语言),但是像JavaDoc for java.net.Socket个状态一样,'一个套接字是两台机器之间通信的端点。因此,关闭服务器端套接字会破坏两个套接字(服务器端和客户端端)之间的连接,但是客户端套接字仍然绑定,因此isBound()返回true。也许您打算致电isConnected()isClosed()