我想制作服务器(用于多人游戏),但我无法通过我的公共 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 )我的电脑运行服务器...)请帮助我!:)