このようなメカニズムを使用してローカルアドレスを取得することは、通常、期待どおりに機能しません。システムには通常、少なくとも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アドレスが含まれます。このアドレスに応答を送信するだけで、コンピューターは適切なネットワークインターフェイスからパケットを送信するのに十分な機能を備えています。 。