使用IPv4的套接字通信

时间:2016-12-07 10:54:38

标签: java sockets tcp

我在同一台机器上的两个端口之间使用套接字通信。

在客户端,我使用Socket s = new Socket("localhost", 6666);

但是使用IPv6创建套接字并使用底层tcp6。

  

tcp 0 24 :: ffff:127.0.0.1:57812 :: ffff:127.0.0.1:31210 LAST_ACK -

问题是我无法使用标志java.net.preferIPv4Stack=true,因为我无法阻止所有IPv6通信。

我的问题是,如果我使用Socket s = new Socket("127.0.0.1", 6666);,套接字是否总是使用IPv4创建?我在我的机器上对此进行了测试,测试结果表明将始终使用IPv4。

还有其他方法可以确保IPv4连接吗?或者使用127.0.0.1可以正常工作吗?

1 个答案:

答案 0 :(得分:2)

指定类似127.0.0.1的IPv4地址可确保套接字仅用于IPv4  指定类似localhost的主机名会导致系统依赖行为:在某些系统上,localhost被声明为127.0.0.1(IPv4)和::1(IPv6),而在其他系统上,localhost仅用于IPv4地址和不同的名称(如ip6-localhost或类似名称)用于IPv6。在localhost同时用于IPv4和IPv6的情况下,套接字通常使用首选IPv6系列创建。

相关问题