【问题标题】:java.net.InetSocketAddress and java.net.SocketAddress Support IPv6?java.net.InetSocketAddress 和 java.net.SocketAddress 支持 IPv6?
【发布时间】:2013-01-15 03:12:43
【问题描述】:

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

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

【问题讨论】:

  • 显示到目前为止您已经尝试过的内容。 InetSocketAddress 接受 InetAddress 并且应该接受 Inet4AddressInet6Address
  • 好的,然后我在 netty-3.2.6.Final-dist 上尝试 java.net.SocketAddress 的方法无法找到我的 Ipv6 地址...

标签: java ipv6 ipv4


【解决方案1】:

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

我有以下代码行尝试连接到两个不同的 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 时失败,它也可以解释您的问题。

希望这会有所帮助 =)

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

【讨论】:

    猜你喜欢
    • 2018-06-01
    • 2012-07-26
    • 2021-10-03
    • 2013-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多