在实际的Java程序中使用IPv6

IPv6使用现在正在慢慢开始,因此我目前正在修复和更新所有为IPv6做好准备的应用程序.

其中一个应用程序是Java编辑器JOSM(http://josm.openstreetmap.de/).即使操作系统使用IPv6,Java也不会在默认配置中使用IPv6.

根据
http://docs.oracle.com/javase/1.5.0/docs/guide/net/ipv6_guide/#using
我将java.net.preferIPv6Addresses设置为true以使其使用IPv6.关于互联网连接断开的结果是用户错误报告.

似乎Java只切换到使用IPv6地址而不是IPv4,但不做其他事情.我维护的所有基于C/C++的软件都已更改为检查并尝试所有可用的IP地址,因此只要其中一个地址有效,就会跳过损坏的IPv6(或IPv4)地址.对我来说,看起来Java只尝试一次,这在现实世界中不起作用.

当IPv6通过隧道传输时,OS通常也更喜欢IPv4而不是IPv6.看起来Java也忽略了这个设置.

所以我的问题是:在没有破坏IPv4用户的应用程序的情况下,有没有什么好方法可以让Java应用程序默认使用IPV6.

用户错误报告:http://josm.openstreetmap.de/ticket/8562,http://josm.openstreetmap.de/ticket/8627.

解决方法

所以你有两个问题:

>操作系统供应商提供具有损坏的默认IPv6配置的操作系统,和/或用户启用损坏的IPv6配置.
>当它不起作用时,他们会错误地责怪你.

你可以在这里做两件事:

>建议用户如何禁用不必要和破坏的IPv6过渡机制,如Teredo,ISATAP和6to4.有关这些的说明可在因特网上广泛获得.

如果某些操作系统供应商默认情况下不启用此垃圾也会很好,但这可能要求太多.
>在您的应用程序中实施Happy Eyeballs(RFC 6555).这就是现代Web浏览器如何解决这个问题.

Happy Eyeballs指定一种算法,即应用程序尝试(几乎)同时通过IPv6和IPv4进行连接,如果IPv6在短时间内无法工作,则回退到IPv4连接.该试验的结果也缓存了几分钟.

不幸的是,我对Java不够熟悉,不能给你特定的代码来绕过Oracle默认隐藏的所有有趣的东西,但它应该是可行的.

相关文章

摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠...
摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠...
今天犯了个错:“接口变动,伤筋动骨,除非你确定只有你一个...
Writer :BYSocket(泥沙砖瓦浆木匠)微 博:BYSocket豆 瓣:...
本文目录 线程与多线程 线程的运行与创建 线程的状态 1 线程...