Java客户端 - 服务器:函数getInetAdress不返回客户端所需的IP地址

时间:2013-01-13 02:00:43

标签: java client-server ip-address

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

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和IP 0.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.1 IP打印为客户端的IP地址。

我不明白这里发生了什么。看起来服务器不打印客户端的IP地址,而是打印自己的地址。

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

1 个答案:

答案 0 :(得分:0)

127.0.0.1是环回地址。它只能从主机内部看到。客户端连接到它的唯一方法是自己使用它。所以源地址和目标地址都是一样的。

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