我在同一台机器上的两个端口之间使用套接字通信。
在客户端,我使用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
可以正常工作吗?
答案 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系列创建。