7

Java 7は、クラスに新しい静的メソッドを追加しますjava.net.InetAddress

static InetAddress getLoopbackAddress()
Returns the loopback address.

結果には、IP4とIP6のどちらのアドレスが含まれるのでしょうか。

ドキュメントは、この件に関して少し曖昧です。

返されるInetAddressは、IPv4ループバックアドレス127.0.0.1、またはIPv6ループバックアドレス::1を表します。返されるIPv4ループバックアドレスは、127の形式の多くのアドレスの1つにすぎません。*

127.0.0.1Javaは、IPv6ペンダントを返すかIPv6ペンダントを返すかをどのように決定します::1か?

それとも、両方とも同じInetAdressオブジェクトで表されていますか?

結果は常に同じですか?それは私のネットワークカードに依存しますか?

4

3 に答える 3

10

ここで与えられた他の答えは間違っていると思います。

デフォルトでは、Javaは IPv6 スタック(利用可能な場合)を優先しますが、IPv4 アドレスを優先します。微妙な違いに注意してください。これはjava.net.preferIPv4Stackjava.net.preferIPv6Addressesシステム プロパティによって制御され、どちらもデフォルトで false に設定されています。

したがって、InetAddress.getLoopbackAddress()はほとんどの場合 IPv4 アドレスを返します。IPv6 アドレスを返すようにするには、java.net.preferIPv6Addressesシステム プロパティをに設定する必要があります。true

JDK ソースでは、このメソッドの結果に対する OS の依存関係は見当たりません。Java が (デフォルト設定で) このメソッドの IPv4 アドレスを返さない OS は考えられません。

于 2014-02-05T07:32:34.507 に答える
4

.getLocalHost()まず、とこのメソッドには根本的な違いがあります。マシン名.getLocalHost()登録されたアドレスを取得しますが、ローカルのみのループバックアドレスを返します。.getLoopbackAddress()

返されるアドレスに関しては、OSに依存します。-Djava.net.preferIPv4Stack=trueただし、 JVM引数に渡すか、次を使用して、IPv4を優先的に使用するようにJVMに影響を与えることができます。

System.setProperty("java.net.preferIPv4Stack" , "true");
于 2013-01-14T01:09:01.013 に答える
4

IPv6 スタックがあり、Java が IPv4 を優先するように構成されていない場合、::1 が返されます。

それ以外の場合は、127.0.0.1 が返されます。

于 2013-01-16T00:02:34.270 に答える