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