我尝试使用此片段在 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/