InetAddress.getHostAddress( ) совместимость с ipv6 в JDK 1.6?
Конкретно я делаю
InetAddress.getLocalHost().getHostAddress()
Совместимо ли это с ipv6? Работает ли это как для адресов ipv4, так и для v6?
InetAddress.getHostAddress( ) совместимость с ipv6 в JDK 1.6?
Конкретно я делаю
InetAddress.getLocalHost().getHostAddress()
Совместимо ли это с ipv6? Работает ли это как для адресов ipv4, так и для v6?
Расширенный класс 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.
if (InetAddress.getLocalHost() instanceof Inet6Address)
, чтобы увидеть, возвращает ли он Inet6Address
, или прочитать исходный код InetAddress
.
- person Buhake Sindi; 02.08.2011
Я посмотрел на код класса InetAddress, и он действительно работает правильно.
if (isIPv6Supported()) {
o = InetAddress.loadImpl("Inet6AddressImpl");
}
else {
o = InetAddress.loadImpl("Inet4AddressImpl"); }
return (InetAddressImpl)o;
}
Вот код для тестирования на основе приведенного выше анализа:
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();
}
}
Inet6Address
принадлежитInetAddress
.InetAddress
— это фабричный шаблон, возвращающий реализации IPvX. Ваше утверждение не имеет смысла, так какInetAddress
используетInet6Address
. Что касается уважительной причины, ваше редактирование не может быть оправдано, поскольку предоставленного ответа достаточно, чтобы ответить на ваш вопрос. Дополнительное редактирование не может быть оправдано. - person Buhake Sindi   schedule 08.11.2013