JDK 1.6中是否符合InetAddress.getHostAddress() ipv6?
特别是我在做
InetAddress.getLocalHost().getHostAddress()
是否符合ipv6标准?它对ipv4和v6地址都有效吗?
答案 0 :(得分:6)
扩展类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字符串可表示的地址。
答案 1 :(得分:3)
我查看了InetAddress类的代码,它确实做得对。
if (isIPv6Supported()) {
o = InetAddress.loadImpl("Inet6AddressImpl");
}
else {
o = InetAddress.loadImpl("Inet4AddressImpl"); }
return (InetAddressImpl)o;
}
答案 2 :(得分:1)
以下是基于上述分析进行测试的代码:
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();
}
}