-1

我有这个简单的服务器代码:

public class Server {

 public static void main(String[] args) {

    try {
        ServerSocket sSocket = null;
        int serverPort = 57293;
        try {

            sSocket = new ServerSocket(serverPort);
            Socket userSocket = sSocket.accept();
            System.out.println(userSocket.getInetAddress().toString());

        } catch (IOException listenEX) {
            System.out.println("Could not listen on port: " + serverPort);
        }

        sSocket.close();
    } catch (IOException ex) {
        System.out.println(ex.getMessage());
      }
    }

 }

服务器侦听端口57293和 IP0.0.0.0

它只是等待一个连接,然后打印客户端的 IP 地址。这是客户端代码:

 public class Client {

public static void main(String[] args) throws IOException {

    Socket serverSocket = new Socket("192.168.217.1", 57293); 
    DataInputStream in = new DataInputStream(serverSocket.getInputStream());
    DataOutputStream out = new DataOutputStream(serverSocket.getOutputStream());

    }
 }

现在作为客户端内的服务器IP,我输入计算机的本地IP。如果我这样做,服务器将打印相同的 IP 作为结果,即/192.168.217.1

否则,如果在客户的代码中我更改了行

Socket serverSocket = new Socket("192.168.217.1", 57293);Socket serverSocket = new Socket("127.0.0.1", 57293);

我刚刚更改了服务器 IP,服务器会将127.0.0.1IP 打印为客户端的 IP 地址。

我不明白这里发生了什么。似乎服务器没有打印客户端的 IP 地址,而是打印自身的地址。

我怎样才能避免这种情况发生?192.168.217.1如果客户端也在本地运行,我希望服务器打印

4

1 回答 1

0

127.0.0.1 是环回地址。它仅在该主机内部可见。客户端可以连接到它的唯一方法是自己使用它。所以源地址和目标地址是一样的。

我不明白为什么这对你来说是个问题。127.0.0.1 始终表示本地主机,无论主机的外部 IP 是什么。你得到的结果没有错。这是一个完全有效的 IP 地址,它可以正确识别客户端。

于 2013-01-13T02:55:54.347 回答