2016-12-07 61 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的首選系列來創建。