ローカルIPを取得しようとしています。動作するはずです
System.out.println(Inet4Address.getLocalHost().getHostAddress());
または
InetAddress addr = InetAddress.getLocalHost();
ip = addr.getHostAddress();
System.out.println("Ip: " + ip);
しかし、常に192.168.178.154
ではなく192.168.178.119
を返します(これは私の実際のローカルIP(Terminal-> ifconfig
))
私は何をすべきか?
2つのIPアドレスがあるように聞こえます。
ネットワークアダプターが1つあるコンピューターでは、選択されるIPアドレスは、コンピューターのネットワークアダプターのプライマリIPアドレスです。ただし、マルチホームコンピューターでは、スタックが最初に選択する必要があります。スタックは、接続のターゲットIPアドレスを認識するまで、インテリジェントな選択を行うことができません。
プログラムがconnect()呼び出しをターゲットIPアドレスに送信するか、send()呼び出しをUDPデータグラムに送信すると、スタックはターゲットIPアドレスを参照し、最適なネットワークを選択できるようにIPルートテーブルを調べます。パケットを送信するアダプタ。このネットワークアダプターが選択されると、スタックはそのネットワークアダプターに関連付けられたプライマリIPアドレスを読み取り、そのIPアドレスを送信パケットのソースIPアドレスとして使用します。
2番目のIPとそのLANなどをアクティブにする場合は、それを取り外し、10秒後に再び接続します。他のIPは、ルーティングテーブルでホストIPとして選択される場合があります。
getNetworkInterfaces
から2番目のIPを取得できます。
次のコードを実行してみてください:
public static void main(String[] args) throws Exception
{
System.out.println("Your Host addr: " + InetAddress.getLocalHost().getHostAddress()); // often returns "127.0.0.1"
Enumeration<NetworkInterface> n = NetworkInterface.getNetworkInterfaces();
for (; n.hasMoreElements();)
{
NetworkInterface e = n.nextElement();
Enumeration<InetAddress> a = e.getInetAddresses();
for (; a.hasMoreElements();)
{
InetAddress addr = a.nextElement();
System.out.println(" " + addr.getHostAddress());
}
}
}
システムが複数のIPで構成されている場合は、このようにします。
try {
InetAddress inet = InetAddress.getLocalHost();
InetAddress[] ips = InetAddress.getAllByName(inet.getCanonicalHostName());
if (ips != null ) {
for (int i = 0; i < ips.length; i++) {
System.out.println(ips[i]);
}
}
} catch (UnknownHostException e) {
}