JDK 1.6 中的 InetAddress.getHostAddress() 是否兼容 IPv6?
具体来说,我正在进行以下操作。
InetAddress.getLocalHost().getHostAddress()
它是否符合IPv6标准?它是否适用于IPv4和v6地址?
JDK 1.6 中的 InetAddress.getHostAddress() 是否兼容 IPv6?
具体来说,我正在进行以下操作。
InetAddress.getLocalHost().getHostAddress()
它是否符合IPv6标准?它是否适用于IPv4和v6地址?
扩展类java.net.Inet6Address
符合IPv6标准。
JavaDoc:
该类表示Internet协议版本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
的源代码。 - Buhake Sindi我查看了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
。至于有效的原因,你的编辑不能被证明是合理的,因为提供的答案已足以回答你的问题。额外的编辑也无法被证明是合理的。 - Buhake Sindi