0

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

4

1 回答 1

0

您的问题是关于网络和网络路由的。尝试从本地网络外部连接到您的服务器。来自互联网的某个地方。购买 VPS 或询问您的朋友。首先,您可以检查您的端口是否使用nmap. 如果它已打开,您就可以连接到您的服务器。否则可能是您的 D-LINK 问题。我看到你已经有 22 个端口转发了。当我使用 D-LINK DIR-600 路由器时,我遇到了类似的问题 - 端口已正确调整,但我无法通过打开的端口进行连接。我只能通过使用 DD-WRT - 非官方固件来解决这个问题。

于 2019-10-27T12:02:13.620 回答