【问题标题】:Client can only connect to server when on the same computer客户端只能在同一台计算机上连接到服务器
【发布时间】:2018-09-16 13:00:36
【问题描述】:

我正在尝试创建多人 Java 游戏,并决定使用 Java 套接字服务器。当它们都在我的计算机上运行时,“客户端”能够完美地连接并与服务器通信,但是当我将客户端文件发送到另一台计算机(连接到同一网络的计算机)时,它无法连接到服务器,我不知道为什么。我运行了 cmd 并习惯了代码 netstat -a 并且能够确认服务器正在侦听 127.0.0.1:3251,所以我认为问题出在客户端。

这是服务器的创建方式:

    try {
        this.serverSocket = new ServerSocket();
        this.serverSocket.bind(new InetSocketAddress("localhost",port)); //port is 3251
        window.show("SERVER: " + "Created On Port: " + port);
    } catch (IOException e) {
        window.show("SERVER: " + e.getMessage());
        window.show("SERVER: " + "Unable To Create Server :(");
    }

这就是客户端的连接方式:

    try {
        socket = new Socket("localhost", 3251);
    } catch (IOException e) {
        e.printStackTrace();
    }

当服务器接受连接时,它会创建一个新线程:

        Socket socket = this.serverSocket.accept();
        ServerThread serverThread = new ServerThread(socket);
        serverThread.start();

【问题讨论】:

    标签: java server localhost socketserver


    【解决方案1】:
        try {
        socket = new Socket("localhost", 3251);
    } catch (IOException e) {
        e.printStackTrace();
    }
    

    “localhost”表示您的客户端计算机正在同一台计算机上查找服务器。这应该是服务器 ip 即 192.168.0.2 或其他东西。

    【讨论】:

    • 非常感谢!将“localhost”更改为我的 ipv4 地址修复了一切。
    【解决方案2】:

    你有两个问题:

    1. 在您正在创建this.serverSocket.bind(new InetSocketAddress("localhost",port)); 的服务器上。这将创建一个服务器 localhost 解析到的 IP 地址上的套接字。这可能是个问题。在大多数主机上 localhost 将解析为 127.0.0.1 一个环回地址和您的 服务器套接字只会监听那个。为了能够倾听所有 该机器上的 NIC 使用 new InetSocketAddress(port) see the java doc 进行此构造。或者发现并使用服务器的特定主机名。
    2. 就像@Nick Eu 在客户端上指出的那样,您正在尝试连接到localhost 上的服务器。您需要有一种方法来配置您的客户端,以便它知道服务器在哪里并使用它。

    进一步澄清这一点: socket 是用于通信的 IP:Port。假设一台主机有两个网卡,IP 分别为 192.168.2.1 和 10.0.0.2。现在,如果您将服务器套接字(例如 8000)绑定到192.168.2.1 IP。此端口只能通过使用此组合 192.168.2.1:8000 访问,类似地,如果您将其绑定到 10.0.0.2 IP,它将只能通过该 IP 访问。如果你绑定 localhost(又名Loopback address),它将只能被该主机上的客户端访问。如果您想在该主机上运行仅限于客户端的服务器,这将非常有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-19
      • 1970-01-01
      • 2017-06-01
      • 1970-01-01
      • 2012-01-07
      • 1970-01-01
      • 2023-03-18
      相关资源
      最近更新 更多