InetAddress.getHostAddress()是否符合ipv6?

时间:2011-08-02 07:07:09

标签: java ipv6

JDK 1.6中是否符合InetAddress.getHostAddress() ipv6?

特别是我在做

InetAddress.getLocalHost().getHostAddress()

是否符合ipv6标准?它对ipv4和v6地址都有效吗?

3 个答案:

答案 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();
    }

}