我创建了一个运行以下代码的新线程:
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'。任何想法为什么会这样?非常感谢您的帮助
答案 0 :(得分:1)
我不是套接字方面的专家(我知道它们是什么,但是在Java上没有使用套接字,只在Linux上使用C语言),但是像JavaDoc for java.net.Socket个状态一样,'一个套接字是两台机器之间通信的端点。因此,关闭服务器端套接字会破坏两个套接字(服务器端和客户端端)之间的连接,但是客户端套接字仍然绑定,因此isBound()
返回true。也许您打算致电isConnected()
或isClosed()
?