2012-08-31 231 views
2

我試圖建立一個套接字連接到一個ip:port,並且它在我的一臺計算機上正常工作。客戶端首先使用套接字連接連接到服務器以登錄;之後它期望來自服務器的傳入連接,並且它們是成功的。嘗試套接字連接時出現Java異常

但是,當我在另一臺計算機上嘗試它時,客戶端首次連接登錄成功,然後等待傳入連接。在服務器端,其中連接將被啓動,我得到這個消息:

java.net.NoRouteToHostException

和傳入的連接失敗。

爲什麼會發生這種情況?它可能是防火牆問題嗎?

s = new Socket(id, 4446); 
BufferedWriter out1 = new BufferedWriter(new OutputStreamWriter(s.getOutputStream())); 
BufferedReader in1 = new BufferedReader(new InputStreamReader(s.getInputStream())); 

這就是46個線

java.net.NoRouteToHostException: No route to host: connect 
     at java.net.PlainSocketImpl.socketConnect(Native Method) 
     at java.net.PlainSocketImpl.doConnect(Unknown Source) 
     at java.net.PlainSocketImpl.connectToAddress(Unknown Source) 
     at java.net.PlainSocketImpl.connect(Unknown Source) 
     at java.net.SocksSocketImpl.connect(Unknown Source) 
     at java.net.Socket.connect(Unknown Source) 
     at java.net.Socket.connect(Unknown Source) 
     at java.net.Socket.<init>(Unknown Source) 
     at java.net.Socket.<init>(Unknown Source) 
     at sample_server.doComms.run(doComms.java:46) 
     at java.lang.Thread.run(Unknown Source) 
+0

添加代碼是沒有意義的,這是太複雜,它不聽起來像一個源代碼的問題,因爲它成功在一個系統上 – Evan

+0

這可能是網絡問題。你可以從第二個主機ping服務器,反之亦然? – arturo

+0

顯示你如何連接套接字(而不是你的整個代碼)的代碼,給出任何涉及的主機名和/或IP地址以及完整的堆棧跟蹤。 –

回答

7

API指出:試圖將插座連接到遠程地址和端口時發生了錯誤

信號。通常,由於介入防火牆或中間路由器關閉,無法訪問遠程主機。

你最有可能有一個防火牆或東西擋住的連接。嘗試禁用一個,如果你有一個真正的快速,並看看如何工作。如果它不起作用,那是另一回事(完整的堆棧跟蹤可能會對你的問題發表評論)。

+0

我問那傢伙是否​​有防火牆,他說不,我猜你可能是對的。 Thanx – Evan

+0

是的,ping不工作。 – Evan

+1

@Evan好吧,你需要TeamViewer他或他的東西來爲他尋找他的防火牆:P另外,+ 1 /正確的答案,如果這是正確的(它似乎是) –

2

'沒有路由到主機'意味着你的主機甚至不知道如何聯繫目標。這是一個網絡連接問題。不是防火牆問題。

+0

不確定,但我相信防火牆和代理可能會阻止傳出呼叫,從而導致網絡連接問題。 –

相關問題