リモート サーバーへの接続 (tcp 経由) に使用されるローカル IP アドレスを知る必要があるクライアント Java プログラムを作成しています。
問題は、呼び出し Socket.getLocalAddress().getHostAddress() が誤って (少数のケースのみ) 127.0.0.1 を返すことですが、大部分のケース/PC では正常に動作します...
使用したコードのスニペットは次のとおりです。
public static String getLocalIPAddress(String serverIP, int port) throws UnknownHostException
{
System.out.println("Executing getLocalIPAddress on "+serverIP + ":" + port);
InetAddress inetAddress = InetAddress.getLocalHost();
String ipAddress = inetAddress.getHostAddress();
try {
Socket s = new Socket(serverIP, port);
ipAddress = s.getLocalAddress().getHostAddress();
System.out.println("Local IP : "+s.getLocalAddress().getHostAddress());
s.close();
} catch (Exception ex) {}
return ipAddress;
}
成功した場合に得られる出力は
Executing getLocalIPAddress...
Executing getLocalIPAddress on 1.2.3.4:80
Local IP : 6.7.8.9
失敗した場合に得られる出力は
Executing getLocalIPAddress...
Executing getLocalIPAddress on 1.2.3.4:80
Local IP : 127.0.0.1
失敗した場合、例外を通過していないことに注意してください。
どんなアドバイスでも大歓迎です。