再一次,在这里人们的指导下,我找到了答案。当我执行以下操作时,上述Java程序将起作用:
java -Djava.net.preferIPv4Stack=true DomainResolutionTest
细节:
jgreenwood@jeg-ubuntu64:~$ java -Djava.net.preferIPv4Stack=true DomainResolutionTest www.google.com/209.85.225.106jgreenwood@jeg-ubuntu64:~$ java DomainResolutionTest ERROR: www.google.comjava.net.UnknownHostException: www.google.com at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method) at java.net.InetAddress$1.lookupAllHostAddr(InetAddress.java:849) at java.net.InetAddress.getAddressFromNameService(InetAddress.java:1200) at java.net.InetAddress.getAllByName0(InetAddress.java:1153) at java.net.InetAddress.getAllByName(InetAddress.java:1083) at java.net.InetAddress.getAllByName(InetAddress.java:1019) at java.net.InetAddress.getByName(InetAddress.java:969) at DomainResolutionTest.main(DomainResolutionTest.java:12)
事实证明,IPv6堆栈中存在一个错误。有几篇文章使我得出这个结论:
http://uclue.com/?xq=2127
http://bugs.debian.org/cgi-
bin/bugreport.cgi?bug=477211
https://answers.launchpad.net/ubuntu/+question/23024
我希望我不必每次运行Java应用程序时都添加IPv4废话。最终的解决方案可能在第二个链接中-缺少软件包。我们将会看到。
Debian错误报告日志-#477211 ia32-sun-java6-bin:需要依赖lib32nss-mdns
…无法解析域名。在系统的其余部分可以很好地解决,还没有与其他JDK一起测试。从软件包安装,并使用update-java-
alternatives进行设置。DNS对我系统上的其他所有功能都起作用。在Debian 2.6.23-AMD64上运行。尝试了Lenny软件包和Sid软件包。对于sun-
java6-bin可以正常工作,而对于ia32-sun-java6-bin则可以失败。精氨酸
…如果您用strace击中Java,您会发现它正在尝试使用libnss_mdns4_minimal.so.2,该软件包可在lib32nss-
mdns包中找到。您应该对此添加依赖性以修复该错误。sun-java6-bin也会发生同样的事情-这里使用libnss-mdns。
我的机器上确实缺少该软件包:
jgreenwood@jeg-ubuntu64:~$ dpkg -L lib32nss-mdnsPackage `lib32nss-mdns' is not installed.Use dpkg --info (= dpkg-deb --info) to examine archive files,and dpkg --contents (= dpkg-deb --contents) to list their contents.
无论哪种方式,我都希望这篇文章对其他人有所帮助,因为这是要弄清的主要PITA。



