【发布时间】:2020-02-23 00:23:35
【问题描述】:
我想制作服务器(用于多人游戏),但我无法通过我的公共 IP 地址连接到我的电脑。 我的服务器是这样用 Java 编写的:
int port = 60000;
int client_num = 0;
ClientHandler clientHandler;
try (ServerSocket serverSocket = new ServerSocket(port)) {
System.out.println("Server is listening on port " + port);
while (true) {
Socket client = serverSocket.accept();
System.out.println("New client connected: "+client);
}
} catch (IOException ex) {
System.out.println("Server exception: " + ex.getMessage());
ex.printStackTrace();
}
客户端是这样用javascript编程的(我正在使用websockets):
var websocket = new WebSocket(
'ws://127.0.0.1:60000');
websocket.onopen = function () {
$('h1').css('color', 'green');
websocket.send("Hello");
$('h1').css('color', 'purple');
};
你可以看到,我在服务器和客户端都使用相同的端口(60 000)。在我写IP地址(ws://127.0.0.1)的客户端中,我可以写localhost(127.0.0.1)或我的私人IP(192.168.0.100) - 它工作!但是当我在那里写我的公共 ip(类似于 91...***)时,它不起作用并且服务器不写消息“新客户端已连接:”(比如如果是本地主机)...所以我认为问题出在端口转发上。但我尝试移植,如图所示:
但它仍然不起作用。我还尝试在我的路由器中使用 DMZ。结果相同。我还尝试关闭我的防病毒软件的防火墙和网络防护。同样的结果......即使我尝试通过一些在线测试(https://www.yougetsignal.com/tools/open-ports/)检查我的端口 60 000 是否打开,它说我的端口已关闭......那么为什么它不起作用? 我发现,即使我打开侦听端口 80 和 443 的 Apache,检查打开端口的工具也会显示此端口(80 和 443)已关闭(即使我在路由器上打开 DMZ)...为什么? 注意:我确定,我使用正确的本地 IP 来设置端口转发和 DMZ,我使用 IP 给我 ipconfig(正如我已经写过的 - 当我使用这个本地地址(192.168.0.100 )我的电脑运行服务器...) 请帮我! :)
【问题讨论】:
-
问题:你定义了那个端口转发规则后,你保存重启路由器了吗?
-
我点击了保存设置。我尝试重启设备,但它更改了所有本地 IP 地址,所以我的端口转发规则无效......所以我无法重启设备,只能保存设置。还有什么建议吗?
-
您需要在 DHCP 中根据其 MAC 地址为您的 PC 提供一个固定地址,或者使用静态 IP 配置它并将该 IP 从 DHCP 中排除。然后你就可以重启路由器了。顺便说一句,这个问题与 StackOverflow 无关,因为它是关于配置的问题,而不是关于编程的问题。
-
好的,当我再次重启设备时,它给了我相同的 IP(即使我没有给我的 PC 固定地址),所以端口转发规则是正确的......但它仍然没有t 工作...有什么建议吗?
标签: javascript java websocket portforwarding dmz