2016-12-07 43 views
0

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

在客户端,我用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会正常工作吗?

回答

2

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