2010-05-10 103 views
3

我希望你能幫上忙。我相當新的程序和進出口玩java套接字。Java Socket返回True

問題是下面的代碼。由於某些原因,commSocket = new Socket(hostName, portNumber);即使在未與服務器連接的情況下也返回true(服務器尚未實現!)。有關這種情況的任何想法?

對於hostName我傳遞我的本地計算機IP和端口手動選擇的端口。

public void networkConnect(String hostName, int portNumber){ 

    try { 
     networkConnected = false; 
     netMessage = "Attempting Connection"; 
     NetworkMessage networkMessage = new NetworkMessage(networkConnected, netMessage); 

     commSocket = new Socket(hostName, portNumber); 

     // this returns true!! 
     System.out.println(commSocket.isConnected()); 

     networkConnected = true; 
     netMessage = "Connected: "; 


     System.out.println("hellooo"); 

    } catch (UnknownHostException e){ 
     System.out.println(e.getMessage()); 

    } catch (IOException e){ 
     System.out.println(e.getMessage()); 

    } 
} 

非常感謝。

編輯:new Socket(..,..);阻止不是嗎?我認爲在這種情況下,如果沒有例外的處理,那麼我們有一個真正的聯繫?

編輯:我玩過反病毒,現在它工作!

+2

'新的Socket(...)'** **肯定不返回'true'。它返回一個新的'Socket'對象,如果它沒有拋出異常。 – 2010-05-10 12:56:23

回答

3

幾天前在公司電腦上出現了與此相同的情況,並搜索了幾個小時。

檢查您的防病毒軟件時,某些防病毒軟件(如E*** N**32)使用實時TCP掃描,即使目標端口上沒有任何內容正在偵聽,也會使連接成功,但在您嘗試從套接字讀取/寫入時稍後重置。

添加到您的代碼:

commSocket.getOutputStream().write(0); 
commSocket.getInputStream().read(); 

如果你接收到一個SocketException現在,你真的應該考慮改變你的殺毒軟件。

或者,在創建套接字後在您的應用程序中設置一個斷點,然後使用netstat -ano(在Windows上)檢查哪個進程ID與套接字的另一個端點關聯(應該在您的機器上,如果連接到本地主機)。

我建議你禁用防病毒,但在某些情況下甚至不幫助卸載他們破碎的生活TCP掃描驅動器...

+0

commSocket.getInputStream()。write(0);不起作用。我找不到寫入方法。 – iTEgg 2010-05-10 13:16:27

+0

超級!我只是將我的防病毒軟件更改爲正常模式,現在它正在運行!偉大的提示! – iTEgg 2010-05-10 13:25:39

+1

@ikurtz在輸出流上使用寫入,並在輸入流上讀取。 :-) – corsiKa 2010-05-10 13:32:45

1

Socket constructor立即連接,如果不成功,將拋出IOException。所以顯然你已經成功連接到一個服務器(這可能是你沒有做的)。

+0

那麼我在本地機器上使用本地IP進行測試。所以沒有服務器在運行。奇怪的? – iTEgg 2010-05-10 13:06:14

+0

如果您使用的是本地IP,則可能將其用作您的服務器。 – 2010-05-10 13:06:48

+0

得到一個沒有服務器運行的連接? – iTEgg 2010-05-10 13:09:40