【问题标题】:Chat application in Java over the Internet | ConnectException (connection timed out)通过 Internet 使用 Java 聊天应用程序 | ConnectException(连接超时)
【发布时间】:2012-08-23 09:06:33
【问题描述】:

我正在尝试开发一个基本的聊天应用程序。我已经为服务器和客户端编写了所需的代码,并且该应用程序在 LAN 上运行良好。然而,当我试图让它在互联网上运行时,我被卡住了。我了解到我需要在服务器机器中进行端口转发,并且我做到了。我转发了 6000 端口,canyouseeme.org 给出了成功的消息。因此,端口肯定是打开的,并且没有防火墙阻止它。但是,客户端代码无法连接到它。

服务器代码如下打开一个ServerSocket(它们的定义在前面已经做了):

InetAddress IP = InetAddress.getLocalHost();
welcomeSocket = new ServerSocket(6000, 10, IP);
connectionSocket = welcomeSocket.accept();

客户端代码尝试连接它主要使用以下代码:

clientSocket = new Socket("xx.xxx.xxx.xx", 6000);

其中 xx.xxx.xxx.xx 是服务器机器的 IP 地址(不是本地的 192.168.xx)。

这是 Java 问题吗?我问是因为端口 6000 显然是打开的,并且 canyouseeme.org 可以成功连接到它,但我的客户端无法连接。为什么会发生这样的事情?任何帮助将不胜感激(有关更多信息,请阅读下面的 cmets)。

错误信息如下:

java.net.ConnectException: Connection timed out: connect
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
    at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
    at java.net.Socket.connect(Socket.java:519)
    at java.net.Socket.connect(Socket.java:469)
    at java.net.Socket.<init>(Socket.java:366)
    at java.net.Socket.<init>(Socket.java:180)
    at ChatPanel$ConnectButtonListener.actionPerformed(ChatPanel.java:206)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
    at java.awt.Component.processMouseEvent(Component.java:6038)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)
    at java.awt.Component.processEvent(Component.java:5803)
    at java.awt.Container.processEvent(Container.java:2058)
    at java.awt.Component.dispatchEventImpl(Component.java:4410)
    at java.awt.Container.dispatchEventImpl(Container.java:2116)
    at java.awt.Component.dispatchEvent(Component.java:4240)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916)
    at java.awt.Container.dispatchEventImpl(Container.java:2102)
    at java.awt.Window.dispatchEventImpl(Window.java:2429)
    at java.awt.Component.dispatchEvent(Component.java:4240)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)

【问题讨论】:

  • 确保没有防火墙阻止调用并且端口是打开的。
  • 嗯,正如我所说,端口已经打开,没有防火墙阻止它。防火墙可以阻止客户端的传出请求吗?如果是这样,我该如何检查?
  • 确保将端口转发到正确的内部地址(来自路由器)。如果您没有将本地地址设置为静态,本地地址将在没有警告的情况下更改。
  • 是的,我已经把它变成了静态的。它是 192.168.2.15,路由器将端口转发到完全相同的本地地址。
  • 你能从客户端telnet到远程端口吗? telnet hostname 6000 来自命令行。

标签: java timeout port forwarding connectexception


【解决方案1】:

在您应该使用的客户端上

clientSocket = new Socket(InetAddress.getByAddress(addr), port);

其中addr 是服务器的公共地址,port 是绑定到的服务器。

【讨论】:

  • 我做了这个改变,现在我可以毫无问题地通过端口 23 连接。谢谢你。但是端口 6000 仍然会引起一些麻烦。所以,我猜 6000 不是一个明智的端口选择。你觉得呢,我应该继续保留 23 还是给自己找一个像 5192 这样的虚拟端口?
  • 您是否检查了 NAT/防火墙配置。如果你有端口转发问题试试这个netcallback.sourceforge.net
  • 我现在通过 TeamViewer 使用服务器计算机,即使更改单个设置也需要很长时间。所以,几个小时后我会回到家,我会尝试一堆不同的端口。如果我无法通过 23 以外的任何其他端口进行连接,我将检查您建议的链接并将其发布在此处。
  • 我刚刚通过端口 61223 连接。再次感谢您:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-16
相关资源
最近更新 更多