2

リモート サーバーへの接続 (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

失敗した場合、例外を通過していないことに注意してください。

どんなアドバイスでも大歓迎です。

4

1 に答える 1