2011-02-15 125 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

相關問題