我尝试在Windows 7中的Java 1.6 IPv6服务器套接字绑定,使用该片段:

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

不幸的是,这将失败,一个IOException:地址家庭不是由协议族的支持:绑定

据我所知,Java正在与Windows使用独立的IPv4和IPv6堆栈(即使Windows 7没有)的假设写的,因此该绑定一个套接字同时V4和V6不能工作。然而,这不是我试图做的。我只是希望到V6套接字绑定到的任何的地址(即::)

修改:它也不能在Vista

我在做什么错了?

有帮助吗?

解决方案

我找到了解决办法;这是错误6230761 。以创建IPv6服务器套接字通道唯一支持的方法是,首先创建的ServerSocket:

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

修改:这意味着NIO不能真正被使用IPv6使用

其他提示

这错误意味着您正在使用非IPv6协议混合的IPv6地址。这可能意味着你开始做的不是的ServerSocketChannel支持IPv6。我不认为Java正式支持Windows 7呢。尝试使用NetworkInterface.getNetworkInterfaces()和NetworkInterface.getInetAddresses(),以确保IPv6地址实际上是提供给您的Java应用程序。在Java文档甚至说,当试图IPv6是不可用,或者当IPv6的已被禁用,会引发异常传递一个IPv6地址。

我看到了这个问题的jython以及

http://bugs.jython.org/issue1711

在的jython插座模块必须使用的java.nio,因为这是支持无阻塞功能,CPython的兼容性要求的唯一途径。

我非常失望地看到,IPV6将不包含在最新的Windows最新版本的Java运行支持:这是很可怜的。 IPv4地址空间已经是疲惫不堪。那里将是在未来几个月的IPV6支持更大量的需求,更不用说年

我们具有用于用户的jython一种解决方法,这将强制的getaddrinfo()函数返回IPV4地址只。这是一个贫穷的解决办法,但至少它得到了用户的正常运行,如果他们能获得的IPv4地址。

http://wiki.python.org/jython/NewSocketModule#IPV6_address_support

有一直只是从对Jython的跟踪器的bug记者另一份报告。他说,他已与IPV6使用java.nio中成功的插座,JDK 1.7的早期版本。

http://bugs.jython.org/issue1711

所以我的关于Jython的IPV6支持的博客文章是不是为时过早: - )

http://jython.xhaus.com/jython-supports-ipv6/

嗯,看来我的第二应答已被列为以上我的第一个答案。请参阅下面的我的第一个回答的上下文。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top