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)
+1,但我不會說沒有任何連接從該錯誤。可以有連接,但防火牆阻止TCP握手。另一方面,在「無連接」時,ICMP可以立即將此事件報告爲「主機不可達」錯誤(或類似情況),而無需等待超時。但是,是的,總的來說,這意味着目標機器在一段時間內(不管什麼原因)都沒有確認TCP連接嘗試。 – rkosegi
@rkosegi OP說明他已經禁用了兩個防火牆。 ICMP UNREACH作爲另一種證明缺乏連接性的方式存在並不相關,因爲他沒有得到該信息。你的邏輯是錯誤的。 – EJP