在网络项目中 我看到了日志:
hadoop.hbase.zookeeper.ZKConfig - java.net.UnknownHostException: example.com
at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method)
at java.net.InetAddress$1.lookupAllHostAddr(InetAddress.java:850)
at java.net.InetAddress.getAddressFromNameService(InetAddress.java:1201)
at java.net.InetAddress.getAllByName0(InetAddress.java:1154)
at java.net.InetAddress.getAllByName(InetAddress.java:1084)
at java.net.InetAddress.getAllByName(InetAddress.java:1020)
at java.net.InetAddress.getByName(InetAddress.java:970)
但是当我 ping example.com 时,没关系,我也 telnet example.com 2181 成功了!
我找到了similar question
所以我在我的服务器 java DomainResolutionTest example.com 中运行DomainResolutionTest
但没关系!
ENV:
java -version
java版“1.6.0_25”
Java(TM)SE运行时环境(版本1.6.0_25-b06)
Java HotSpot(TM)64位服务器VM(版本20.0-b11,混合模式)
os:Red Hat Enterprise Linux Server release 5.7
我很好奇为什么是Inet6AddressImpl,我认为它可能是Inet4AddressImpl
如何解决?
是什么原因?
答案 0 :(得分:4)
如果是双栈(ipv6 + v4),则Java更喜欢ipv6。
如果您的ipv6以某种方式配置错误,您可以强制它更喜欢ipv4。
使用以下命令设置系统属性: -Djava.net.preferIPv4Stack =真
soure:http://docs.oracle.com/javase/6/docs/technotes/guides/net/ipv6_guide/
答案 1 :(得分:4)
我遇到了同样的异常,并通过在/ etc / hosts中手动设置我的主机名来解决这个问题,以解决' localhost'进入两者。
127.0.0.1 localhost DL006285-linux
# special IPv6 addresses
::1 localhost ipv6-localhost ipv6-loopback DL006285-linux
答案 2 :(得分:1)
向程序提供子网值可能存在问题。 我在传递给程序之前通过修剪它来给出了子网值。
subnet = subnet.trim();
int timeout = 1500;
for(int i=1;i<254;i++)
{
try
{
String host = subnet +"."+i;
if (InetAddress.getByName(host).isReachable(timeout))
{
Check = Check+host+"\n";
System.out.println(host);
}
}
catch (UnknownHostException ex) {
Logger.getLogger(WiFi.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(WiFi.class.getName()).log(Level.SEVERE, null, ex);