私はこの単純なサーバーコードを持っています:
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
1 つの接続を待つだけで、クライアントの 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
クライアントもローカルで実行されている場合は、サーバーに印刷させたいと思います