使用IPv6的Java套接字编程

问题描述

我是网络编程的新手,我有几个问题,在任何地方都找不到。 建立连接时,我不明白IPv4和IPv6之间的代码是否有差异。

示例代码Socket socket = new Socket(“127.0.0.1”,5000)

据我了解,以上代码用于IPv4。但是,如果要使用IPv6,如何初始化套接字?

解决方法

在建立连接时,我不理解ipv4和ipv6之间的代码是否存在差异。

没有什么区别。

  • 如果要使用显式IPv6地址,通常只需在IPv6 syntax中用IP地址字符串实例化Socket

  • 如果使用DNS名称,则可用的网络堆栈将确定您使用的是IPv4还是IPv6:

    • 如果(操作系统)仅支持并可用一个堆栈,则使用该堆栈。
    • 如果两个堆栈都可用,则java.net.preferIPv4Stack属性的设置确定使用哪个。

有关更多信息,请阅读Oracle Java文档中的Networking IPv6 User Guide

例如,据我所知,例如:Socket socket = new Socket("127.0.0.1",5000)用于ip4。但是,如果要使用ip6,如何初始化套接字?

Socket socket = new Socket("::1",5000);

另请参阅:What is IPV6 for localhost and 0.0.0.0?