是InetAddress.getHostAddress()在JDK 1.6中符合ipv6嗎?InetAddress.getHostAddress()與ipv6兼容?
具體我做
InetAddress.getLocalHost().getHostAddress()
它是命令ipv6兼容?它是否適用於ipv4和v6地址?
是InetAddress.getHostAddress()在JDK 1.6中符合ipv6嗎?InetAddress.getHostAddress()與ipv6兼容?
具體我做
InetAddress.getLocalHost().getHostAddress()
它是命令ipv6兼容?它是否適用於ipv4和v6地址?
我看了InetAddress類的代碼,它的確在做正確的事情。
if (isIPv6Supported()) {
o = InetAddress.loadImpl("Inet6AddressImpl");
}
else {
o = InetAddress.loadImpl("Inet4AddressImpl"); }
return (InetAddressImpl)o;
}
擴展類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字符串可表示地址。
謝謝 - 是InetAddress.getLocalHost()。getHostAddress()安全嗎?請看看我的編輯。 – Fakrudeen
@Fakrudeen,我想你必須做'if(InetAddress.getLocalHost()instanceof Inet6Address)'來查看它是否返回'Inet6Address'或者讀取'InetAddress'源代碼。 –
@Elite,我看了看源代碼。取決於是否支持IPv6,它似乎正在做正確的事情。但我只是想向社區證實。 InetAddress靜態塊: \t if(isIPv6Supported()){ \t o = InetAddress.loadImpl(「Inet6AddressImpl」); \t} else { \t o = InetAddress.loadImpl(「Inet4AddressImpl」); \t} \t return(InetAddressImpl)o; } – Fakrudeen
下面是測試代碼基於以上分析:
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();
}
}
結論是:這的確是符合IPv6的。 – Fakrudeen
你仍然需要接受答案。 :-) –
你能否批准我的編輯 - 然後我會接受答案。就目前而言,人們不確定答案是肯定的還是不肯定的。 – Fakrudeen