2011-02-15 130 views
0

我创建运行下面的代码一个新的线程:关闭ServerSocket - 如何正确检查客户端套接字是否关闭?

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());

它始终返回true。同样,如果我检查连接的远程IP地址,它不会返回null,而是'/127.0.0.1'。任何想法,为什么这可能会发生?您的帮助

+0

如何“杀死服务器连接”?调用serverSocket.close()? – 2011-02-15 17:33:14

回答

1

非常感谢我不是插座专家(我知道它们是什么,但都没有使用过Java的插座,只有C对Linux的),但像JavaDoc for java.net.Socket状态,“A座是两台机器之间通信的端点。因此,关闭服务器端套接字会破坏两个套接字(服务器端和客户端)之间的连接,但您的客户端套接字仍处于绑定状态,因此isBound()返回true。也许你打算拨打isConnected()isClosed()

+0

你好。我最终做的是试图重新建立与服务器的连接。如果返回包含“连接被拒绝”的异常,那么我推断服务器套接字已关闭。感谢您的帮助! – Joeblackdev 2011-02-15 21:24:57