java - 在 Windows 上绑定(bind) IPv6 服务器套接字

标签 java windows windows-7 ipv6

我尝试使用此片段在 Windows 7 上的 Java 1.6 中绑定(bind) IPv6 服务器套接字:

ssock = ServerSocketChannel.open();
ServerSocket sock = ssock.socket(); 
sock.bind(new InetSocketAddress(InetAddress.getByAddress(new byte[16]), 0));

不幸的是,这失败并出现 IOException:协议(protocol)族不支持的地址族:绑定(bind)

我知道 Java 是在假设 Windows 使用单独的 v4 和 v6 堆栈(即使 Windows 7 不使用)的假设下编写的,因此为 v4 和 v6 绑定(bind)单个套接字是行不通的。然而,这不是我想要做的:我只是想将 v6 套接字绑定(bind)到 any 地址(即::)。

编辑:它在 Vista 上也失败了。

我做错了什么?

最佳答案

我找到了解决方案;它是 bug 6230761 .唯一支持创建 IPv6 服务器套接字 channel 的方法是先创建服务器套接字:

ServerSocket s = new ServerSocket();
s.bind(new InetSocketAddress(InetAddress.getByName("::"), 0));

编辑:这意味着 NIO 不能真正与 IPv6 一起使用。

关于java - 在 Windows 上绑定(bind) IPv6 服务器套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1357091/

相关文章:

c# - WMI 提供程序程序集中的 RunInstaller 属性

c++ - 在另一个进程地址空间,调用dll中的函数,如何

Java 访问被拒绝

java - 如何将hadoop文件导入intelliJ?

java - MongoDB Java API ISO日期

java - 在 MySQL 表中存储毫秒(使用 Java 存储/检索)

git - 使用 p4merge 作为 git diff 工具

java - 如何在 CSV 文件或 Excel 文件中获取该目录内的文件路径、名称、创建日期、上次修改日期和文件扩展名?

Python - pip pywin32 失败

python - 如何强制 easy_install.exe 在当前命令窗口中打印输出?