1

java.net.InetSocketAddress 和 java.net.SocketAddress 是否支持 IPv6?

因为我研究并尝试的两个类不能让我查看 ipv6 连接它只能查看 ipv4 连接任何人都尝试过并且能够编辑代码?

4

1 回答 1

3

对您的问题的部分回答,即使它可能为时已晚而无法立即使用 =)。

我有以下代码行尝试连接到两个不同的 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'

第二个地址在第三行抛出“java.net.SocketException:协议族不可用”。该地址是“2610:20:6F15:15::27”。

一开始我以为问题是Java 1.7中的InetSocketAddress不支持IPv6,但我发现Java中实际上有两个类继承自InetAddress类:Inet4Address和Inet6Address

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 回答