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

时间:2013-01-15 03:12:43

标签: java ipv6 ipv4

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

因为我研究并尝试它的两个类无法让我查看ipv6连接它只能查看ipv4连接,有人尝试并能够编辑代码吗?

1 个答案:

答案 0 :(得分: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:Protocol family unavailable'。该地址是'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时失败了,它也可以解释您的问题。

希望这有助于=)

P.S。 InetAddress和InetSocketAddress不是同一个类,但通过测试您正在处理的IP地址类型,可能有办法解决问题。