【问题标题】:Java: Can socket connect to IPv6 address while binding a IPv4 address?Java:套接字可以在绑定 IPv4 地址时连接到 IPv6 地址吗?
【发布时间】:2013-05-25 11:44:57
【问题描述】:
InetSocketAddress ipv4 = ...; // the IPv4 address
InetSocketAddress ipv6 = ...; // the IPv6 address

Socket sock = ...; // initialize a socket

sock.bind(ipv4);
sock.connect(ipv6, 0);

双方均支持 IPv4/IPv6 双栈。

Java 可以支持这种连接吗?

如果 JDK 可以尝试将绑定地址转换为 IPv6 或将目标地址转换为 IPv4?

我在连接到 IPv4 时尝试了绑定 IPv6 的情况。 JDK 在连接过程中将绑定的 IPv6 地址转换为 IPv4 地址。 但是在连接到 IPv6 时尝试绑定 IPv4(如上所述),我只是遇到了超时异常。 我不确定这是不支持还是我的环境有问题。 我想应该有一些异常表明在连接之前抛出不支持,而不是最终超时。

有什么想法吗?谢谢。

【问题讨论】:

  • 这就是 IPv4 映射的 IPv6 地址的用途,拥有一个有效的 IPv4 和 IPv6 地址来连接到这两个家庭。

标签: sockets bind connect ipv6 ipv4


【解决方案1】:

IPv4 和 IPv6 是不同的协议。你不能混合它们。您只能从一个 IPv4 地址连接到另一个 IPv4 地址或从一个 IPv6 地址连接到另一个 IPv6 地址。

【讨论】:

    【解决方案2】:

    可以在 unix 机器上创建单独的侦听 IPv4 和 IPv6 的套接字。 http://msdn.microsoft.com/en-us/library/windows/desktop/bb513665%28v=vs.85%29.aspx

    【讨论】:

      猜你喜欢
      • 2021-09-25
      • 2015-12-25
      • 2021-04-28
      • 1970-01-01
      • 2017-04-27
      • 2020-02-20
      • 2012-06-15
      • 1970-01-01
      相关资源
      最近更新 更多