2016-01-23 116 views
0

我已經使用Java套接字編寫了TCP客戶端服務器對。當我從本地機器運行客戶端和服務器時,我沒有任何問題。同樣,如果我在本地機器上運行服務器,並在Ubuntu虛擬機上(也在本地機器上)運行客戶機,則不會出現任何問題。在本地計算機上運行服務器並在另一臺計算機上運行客戶端時,出現以下錯誤。我認爲這可能與防火牆有關,所以我在兩臺機器上關閉它,但問題依然存在。它可能與我選擇的端口有關嗎? (我在4000年代使用了一個隨機端口)。Java套接字:超時異常

java.net.ConnectException: Connection timed out: connect 
at java.net.DualStackPlainSocketImpl.connect0(Native Method) 
at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79) 
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339) 
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200) 
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182) 
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172) 
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) 
at java.net.Socket.connect(Socket.java:579) 
at java.net.Socket.connect(Socket.java:528) 
at java.net.Socket.<init>(Socket.java:425) 
at java.net.Socket.<init>(Socket.java:208) 
at client.Client.start(Client.java:150) 
at client.Client.access$100(Client.java:20) 
at client.Client$2.run(Client.java:129) 
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251) 
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:733) 
at java.awt.EventQueue.access$200(EventQueue.java:103) 
at java.awt.EventQueue$3.run(EventQueue.java:694) 
at java.awt.EventQueue$3.run(EventQueue.java:692) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
at java.awt.EventQueue.dispatchEvent(EventQueue.java:703) 
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242) 
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161) 
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138) 
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91) 

回答

2

不,它與港口無關。這是兩臺主機之間的連接問題。沒有任何。您將無法遠程登錄到該IP:端口。您需要查看您的網絡拓撲。

+1

+1,但我不會說沒有任何連接從該錯誤。可以有連接,但防火牆阻止TCP握手。另一方面,在「無連接」時,ICMP可以立即將此事件報告爲「主機不可達」錯誤(或類似情況),而無需等待超時。但是,是的,總的來說,這意味着目標機器在一段時間內(不管什麼原因)都沒有確認TCP連接嘗試。 – rkosegi

+1

@rkosegi OP說明他已經禁用了兩個防火牆。 ICMP UNREACH作爲另一種證明缺乏連接性的方式存在並不相關,因爲他沒有得到該信息。你的邏輯是錯誤的。 – EJP