我有这个简单的服务器代码:
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
答案 0 :(得分:0)
127.0.0.1是环回地址。它只能从主机内部看到。客户端连接到它的唯一方法是自己使用它。所以源地址和目标地址都是一样的。
我不明白为什么这对你来说是一个问题。 127.0.0.1始终表示本地主机,无论主机的外部IP是什么。你得到的结果没有错。它是一个完全有效的IP地址,可以正确识别客户端。