InetAddress.getHostAddress() совместим с ipv6?

InetAddress.getHostAddress( ) совместимость с ipv6 в JDK 1.6?

Конкретно я делаю

InetAddress.getLocalHost().getHostAddress()

Совместимо ли это с ipv6? Работает ли это как для адресов ipv4, так и для v6?


person Fakrudeen    schedule 02.08.2011    source источник
comment
Вывод состоял в том, что он действительно совместим с ipv6.   -  person Fakrudeen    schedule 11.11.2011
comment
Вам все еще нужно принять ответ. :-)   -  person Buhake Sindi    schedule 08.11.2013
comment
Не могли бы вы одобрить мое редактирование - тогда я приму ответ. В нынешнем виде люди не уверены, будет ли ответ «да» или «нет».   -  person Fakrudeen    schedule 08.11.2013
comment
Я не могу. Сообщество отвергло его, и у них были веские причины для отклонения.   -  person Buhake Sindi    schedule 08.11.2013
comment
Обратите внимание, что вопрос не об Inet6Address, а об интерфейсе InetAddress.   -  person Fakrudeen    schedule 08.11.2013
comment
Inet6Address принадлежит InetAddress. InetAddress — это фабричный шаблон, возвращающий реализации IPvX. Ваше утверждение не имеет смысла, так как InetAddress использует Inet6Address. Что касается уважительной причины, ваше редактирование не может быть оправдано, поскольку предоставленного ответа достаточно, чтобы ответить на ваш вопрос. Дополнительное редактирование не может быть оправдано.   -  person Buhake Sindi    schedule 08.11.2013


Ответы (3)


Расширенный класс java.net.Inet6Address совместим с IPv6.

JavaDoc:

Этот класс представляет адрес Интернет-протокола версии 6 (IPv6). Определяется RFC 2373: Архитектура IP-адресации версии 6.

По сути, если вы выполняете InetAddress.getByName() или InetAddress.getByAddress(), методы определяют, является ли имя или адрес именем/адресом IPv4 или IPv6, и возвращают расширенное Inet4Address/Inet6Address соответственно.

Что касается InetAddress.getHostAddress(), он возвращает null. Вам понадобится java.net.Inet6Address.getHostAddress(), чтобы вернуть адрес, представляемый строкой IPv6.

person Buhake Sindi    schedule 02.08.2011
comment
Спасибо - тогда InetAddress.getLocalHost().getHostAddress() безопасен? пожалуйста, посмотрите и на мою правку. - person Fakrudeen; 02.08.2011
comment
@Fakrudeen, я думаю, вам нужно сделать if (InetAddress.getLocalHost() instanceof Inet6Address), чтобы увидеть, возвращает ли он Inet6Address, или прочитать исходный код InetAddress. - person Buhake Sindi; 02.08.2011
comment
@Elite, я посмотрел исходный код. Кажется, все делается правильно, в зависимости от того, поддерживается ли IPv6. Но я просто хотел подтвердить с сообществом. Статический блок InetAddress: if (isIPv6Supported()) { o = InetAddress.loadImpl(Inet6AddressImpl); } else { o = InetAddress.loadImpl(Inet4AddressImpl); } вернуть (InetAddressImpl)o; } - person Fakrudeen; 02.08.2011
comment
@Fakrudeen, ну вот! :-) Молодец, что провел исследование. - person Buhake Sindi; 02.08.2011

Я посмотрел на код класса InetAddress, и он действительно работает правильно.

  if (isIPv6Supported()) { 
      o = InetAddress.loadImpl("Inet6AddressImpl"); 
  } 
  else { 
      o = InetAddress.loadImpl("Inet4AddressImpl"); } 
      return (InetAddressImpl)o; 
  }
person Fakrudeen    schedule 08.11.2013

Вот код для тестирования на основе приведенного выше анализа:

public static void main(String[] args) {
    // TODO Auto-generated method stub
    InetAddress localIP;
    try {
        localIP = InetAddress.getLocalHost();
         if(localIP instanceof Inet6Address){
             System.out.println("IPV6");
         } else if (localIP instanceof Inet4Address) {
             System.out.println("IPV4");
         }
    } catch (UnknownHostException e) {
        e.printStackTrace();
    }

}
person Srinu Yarru    schedule 15.12.2015