2011-08-02 10 views
6

InetAddress.getHostAddress() ipv6はJDK 1.6に準拠していますか?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 Version 6 Addressing Architectureによって定義されています。あなたがしなければ

基本的には、InetAddress.getByName()またはInetAddress.getByAddress()方法は、名前またはアドレスがIPv4またはIPv6の名前/住所があるかどうかを識別し、それぞれの拡張Inet4Address/Inet6Addressを返します。

InetAddress.getHostAddress()については、nullを返します。 IPv6文字列表現可能アドレスを返すには、java.net.Inet6Address.getHostAddress()が必要です。

+0

ありがとうございます - InetAddress.getLocalHost()。getHostAddress()は安全ですか?私の編集を見てください。 – Fakrudeen

+0

@Fakrudeen、 'Inet6Address'を返すか、' InetAddress'ソースコードを読むかを調べるには 'if(InetAddress.getLocalHost()instanceof Inet6Address)'を実行する必要があります。 –

+0

@Elite、私はソースコードを見ました。 IPv6がサポートされているかどうかによって、正しいことをしているようです。しかし、私はちょうどコミュニティと確認したかったのです。 InetAddress静的ブロック: \t if(IPv6がサポートされています){ \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(); 
    } 

} 
関連する問題