2016-01-23 83 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