このようなメカニズムを使用してローカルアドレスを取得することは、通常、期待どおりに機能しません。システムには通常、少なくとも2つのアドレスがあります。リスニング用のアドレスにバインドする127.0.0.1
とip address of nic
、とにバインドするのと同じアドレス0.0.0.0
と同じINADDR_ANYにバインドすることに127.0.0.1
なり ip address of nic
ます。有線および無線のネットワークカードを備えたラップトップを考えてみましょう。どちらかまたは両方を同時に接続できます。この場合、どちらがシステムのIPアドレスと見なされますか?
有効なすべてのNICカードのIPアドレスを列挙するための回答のサブセットを盗みました。これは、すべてのNICのアドレスを処理し、すべてのインターフェイスのIPアドレスを一覧表示します。私のシステムでは、10個のインターフェイスがあるため、最終的にはたくさんのIPアドレスを持っています。
try {
System.out.println("Full list of Network Interfaces:");
for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) {
NetworkInterface intf = en.nextElement();
System.out.println(" " + intf.getName() + " " + intf.getDisplayName());
for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements(); ) {
System.out.println(" " + enumIpAddr.nextElement().toString());
}
}
} catch (SocketException e) {
System.out.println(" (error retrieving network interface list)");
}
一般に、サーバープログラミングをしている場合、UDPサービスでパケットを受信すると、送信者のIPアドレスが含まれます。このアドレスに応答を送信するだけで、コンピューターは適切なネットワークインターフェイスからパケットを送信するのに十分な機能を備えています。 。