1

java.net.InetSocketAddress と java.net.SocketAddress は IPv6 をサポートしていますか?

私が調査して試した2つのクラスでは、ipv6接続を表示できなかったので、ipv4接続しか表示できなかったので、そこにいる人は誰でも試してみて、コードの編集を行うことができましたか?

4

1 に答える 1

3

遅すぎてすぐに使用できない場合でも、質問に対する部分的な回答 =)。

次のコード行で、2 つの異なる IP アドレスへの接続を試みました。

// Defined port must be 13; that is NIST's default listening port.
SocketAddress socketAddress = new InetSocketAddress(currentIpAddress, 13);
socket = new Socket();
socket.connect(socketAddress, nistServerTimeoutInMilliseconds);

最初のアドレスは正常に機能します: '206.246.122.250'

2 番目のアドレスは、3 行目で「java.net.SocketException: Protocol family available」をスローします。そのアドレスは「2610:20:6F15:15::27」です。

Java 1.7 の InetSocketAddress が IPv6 をサポートしていないことが問題かと最初は思っていたのですが、Java には InetAddress クラスを継承するクラスが実は Inet4Address と Inet6Address の 2 つあることがわかりました。

http://docs.oracle.com/javase/6/docs/api/java/net/Inet4Address.html http://docs.oracle.com/javase/7/docs/api/java/net/Inet6Address.html

これは、IPv6 形式を使用して Inet4Address を構築しようとしたときに私のコードが失敗した理由を説明しており、問題も説明している可能性があります。

これが役立つことを願っています=)

PS InetAddress と InetSocketAddress は同じクラスではありませんが、扱っている IP アドレスの種類をテストすることで、問題を回避できる可能性があります。

于 2013-11-06T15:36:25.030 に答える