Что делает статический InetAddress.getLoopbackAddress () вернуться?
Java 7 добавляет новый статический метод в класс java.net.InetAddress
:
static InetAddress getLoopbackAddress()
Returns the loopback address.
теперь мне интересно, какой адрес будет содержаться в результате, IP4 или IP6.
на документация немного туманно на эту тему:
InetAddress возвратился представляют петлевой адрес IPv4 127.0.0.1 или петлевой адрес IPv6 ::1. Петлевой адрес IPv4 вернулся лишь один из многих в форме 127...*
как Java решает, следует ли возвращать 127.0.0.1
или кулон IPv6 ::1
?
или они оба представлены одним и тем же объектом InetAdress?
результат всегда одинаков? Зависит ли это от моей сетевой карты(ов)?
3 ответов
во-первых, существует фундаментальная разница между .getLocalHost()
и этот метод: .getLocalHost()
получит адрес, зарегистрированный в имя компьютера, а .getLoopbackAddress()
вернет только локальный, петлевой адрес.
Что касается возвращаемого адреса, он зависит от ОС. Однако вы можете повлиять на JVM для использования IPv4 в приоритете, передав -Djava.net.preferIPv4Stack=true
к аргументам JVM или с помощью:
System.setProperty("java.net.preferIPv4Stack" , "true");
Я считаю, что другие ответы, приведенные здесь, неверны.
Java, по умолчанию,предпочитает стек IPv6 (если имеется), но предпочитает IPv4-адреса. Обратите внимание на тонкую разницу. Это контролируется java.net.preferIPv4Stack
и java.net.preferIPv6Addresses
свойства системы, которые по умолчанию в false.
отсюда InetAddress.getLoopbackAddress()
почти всегда возвращает IPv4-адрес. Вам придется установить java.net.preferIPv6Addresses
свойства системы true
чтобы заставить его вернуть IPv6 адрес.
Я не вижу никакой зависимости ОС для результата этого метода в источниках JDK. Я не могу придумать ОС, где Java не будет (с настройками по умолчанию) возвращать IPv4-адрес для этого метода.
Если у вас есть стек IPv6, и Java не настроен на предпочтение IPv4, он вернет ::1.
в противном случае он будет возвращать 127.0.0.1.