2011-08-02 145 views
6

InetAddress.getHostAddress()在JDK 1.6中符合ipv6嗎?InetAddress.getHostAddress()與ipv6兼容?

具體我做

InetAddress.getLocalHost().getHostAddress() 

它是命令ipv6兼容?它是否適用於ipv4和v6地址?

+1

結論是:這的確是符合IPv6的。 – Fakrudeen

+0

你仍然需要接受答案。 :-) –

+0

你能否批准我的編輯 - 然後我會接受答案。就目前而言,人們不確定答案是肯定的還是不肯定的。 – Fakrudeen

回答

2

我看了InetAddress類的代碼,它的確在做正確的事情。

if (isIPv6Supported()) { 
     o = InetAddress.loadImpl("Inet6AddressImpl"); 
    } 
    else { 
     o = InetAddress.loadImpl("Inet4AddressImpl"); } 
     return (InetAddressImpl)o; 
    } 
6

擴展類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字符串可表示地址。

+0

謝謝 - 是InetAddress.getLocalHost()。getHostAddress()安全嗎?請看看我的編輯。 – Fakrudeen

+0

@Fakrudeen,我想你必須做'if(InetAddress.getLocalHost()instanceof Inet6Address)'來查看它是否返回'Inet6Address'或者讀取'InetAddress'源代碼。 –

+0

@Elite,我看了看源代碼。取決於是否支持IPv6,它似乎正在做正確的事情。但我只是想向社區證實。 InetAddress靜態塊: \t if(isIPv6Supported()){ \t o = InetAddress.loadImpl(「Inet6AddressImpl」); \t} else { \t o = InetAddress.loadImpl(「Inet4AddressImpl」); \t} \t return(InetAddressImpl)o; } – Fakrudeen

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

}