Java:绑定IPv4地址时套接字是否可以连接到IPv6地址?

时间:2013-05-30 02:34:09

标签: sockets bind connect ipv6 ipv4

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时(如上所述),我只是超时了。 我不确定这不是我的环境的支持或问题。 我想应该有一些异常表明在连接之前没有支持抛出,最后没有超时。

有什么想法吗?感谢。

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

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