gpt4 book ai didi

Java:将端口转发到 ServerSocket

转载 作者:行者123 更新时间:2023-11-30 09:57:09 25 4
gpt4 key购买 nike

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

这是我的服务器代码:

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。

当我运行客户端时,我得到“connecting...”字符串,它卡在那里。我没有得到“连接!”或堆栈跟踪。但正如我之前所说,它确实适用于本地网络。它在连接到 127.0.0.1 和使用 192.168.1.90 时有效。

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

最佳答案

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

不确定您使用的是哪个操作系统,但要检查:Linux:netstat -antWindows 和 Mac:netstat -anp tcp

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

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

关于Java:将端口转发到 ServerSocket,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1983747/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com