java.net.InetSocketAddress と java.net.SocketAddress は IPv6 をサポートしていますか?
私が調査して試した2つのクラスでは、ipv6接続を表示できなかったので、ipv4接続しか表示できなかったので、そこにいる人は誰でも試してみて、コードの編集を行うことができましたか?
遅すぎてすぐに使用できない場合でも、質問に対する部分的な回答 =)。
次のコード行で、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 アドレスの種類をテストすることで、問題を回避できる可能性があります。