【问题标题】:Java: Forwarding a port to ServerSocketJava:将端口转发到 ServerSocket
【发布时间】:2009-12-31 11:43:40
【问题描述】:

我正在构建一个简单的服务器应用程序,我可以在本地网络中连接到它。但我无法通过互联网连接。

这是我的服务器代码:

ServerSocket server;
try {
    server = new ServerSocket(4000);
} catch(IOException ex) {
    System.out.printf("Could not bind socket 4000\n");
    System.exit(1);
}

try {
    Socket socket = server.accept();
    ClientThread client = new ClientThread(socket);
    client.start();
} catch(IOException ex) {
}

这是客户端:

try {
    System.out.printf("connecting...\n");
    Socket socket = new Socket("mydomain.org", 4000);
    System.out.printf("connected!\n");
} catch(UnknownHostException ex) {
    ex.printStackTrace();
} catch(IOException ex) {
    ex.printStackTrace();
}

我已经在我的路由器上转发了端口 4000,它应该可以工作。我之前转发过其他端口,比如 80 和 22。

当我运行客户端时,我得到“正在连接...”字符串,它挂在那里。我没有得到“连接!”或堆栈跟踪。但就像我之前说的,它确实在本地网络上工作。它在连接到 127.0.0.1 和使用 192.168.1.90 时有效。

我使用CanYouSeeMe.org 来检查端口是否打开。在 80 端口成功,但在 4000 超时。

【问题讨论】:

  • 套接字适用于本地网络,但对于互联网通信,最好使用 URL、URLConnection ...

标签: java networking sockets


【解决方案1】:

查看4000端口绑定到哪个ip地址。它可能只绑定到环回地址(127.0.0.1)而不是任何接口。

不确定您使用的是哪个操作系统,但要检查: linux: netstat -ant windows 和 mac:netstat -anp tcp

在端口 4000 上查找 LISTEN 行,看看它是绑定到所有接口(*:4000 或 0.0.0.0:4000),还是绑定到特定接口(127.0.0.1:4000)。

如果它没有监听所有接口,那是你的问题 - 使用让你指定 BindAddress 的构造函数。

【讨论】:

  • 我忘了说我用的是Linux; Fedora 12。刚才提醒我,我可能正在被 iptables 拥有。我将暂时禁用它并重新签入。
  • 一次尝试一件事...在通过防火墙之前尝试从网络中的另一台计算机连接。这样您就可以消除 iptables 和 bindaddress 问题,然后处理您的路由器 nat 和防火墙规则。
  • 是的,它是 iptables,我只是禁用了一段时间。很容易忘记 Fedora 那里有 iptables 并阻止 一切。我还必须使用另一个构造函数来绑定到本地 IP 地址(192.168.1.90)。因此,我会将您标记为解决方案,并在无意中提醒我有关 iptables 的信息。
【解决方案2】:

您已经完成了实验以证明它不是您的 java,因此必须是防火墙或防火墙问题。即使您正确地将端口转发到您的服务器,服务器防火墙也可能不允许入站连接,所以也要检查一下。

【讨论】:

  • 我检查了我的防火墙,它允许除 NetBios 之外的所有协议。我不知道 Java Sockets 使用什么协议,但是勾选了“所有其他协议”。
【解决方案3】:

您有一个防火墙规则会丢弃传入的数据包。这就是您的客户挂起的原因。检查服务器计算机和任何通往外界的网关系统上的 IP 规则。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-19
    • 2011-12-31
    • 2013-07-17
    • 1970-01-01
    • 2019-04-19
    • 2014-08-04
    • 2021-02-16
    相关资源
    最近更新 更多