Java本地主机名ip解析

Java本地主机名ip解析,java,macos,dns,localhost,Java,Macos,Dns,Localhost,我在MacBookPro上遇到了一个奇怪的问题,主机名到ip的解析。这是密码 import java.net.InetAddress; public class IpRes { public static void main(String[] args) throws Exception { String host = args[0]; InetAddress address = InetAddress.getByName(host); System.out.pri

我在MacBookPro上遇到了一个奇怪的问题,主机名到ip的解析。这是密码

import java.net.InetAddress;

public class IpRes {
  public static void main(String[] args) throws Exception {
    String host = args[0];
    InetAddress address = InetAddress.getByName(host);
    System.out.println(address.getHostAddress());
  }
}
我的主机名是“a-b-vik”。我在/etc/hosts中输入了

127.0.0.1 localhost
127.0.0.1 a-b-vik 
这是我运行上述程序时的输出

java IpRes "localhost"
127.0.0.1

java IpRes "a-b-vik"
10.0.0.4
主机名为什么无法解析为“127.0.0.1”?我尝试了-Djava.net.preferIPv4Stack=true,得到了相同的结果。我还试着写了一个C程序,它似乎给出了127.0.0.1。所以这似乎是jvm特有的问题

奇怪的是,如果我在主机名的任何地方使用“\”的话,我都能让它工作。比如说,

java IpRes "a-\b-vik'
127.0.0.1

在我朋友的mac电脑上,使用相同/etc/hosts文件的相同程序也可以工作。不知道我为什么要面对这个问题。有什么想法吗?

您的主机表无效。Hosts表是一种将IP地址映射到一个或多个名称的映射。请尝试以下操作:

127.0.0.1 localhost a-b-vik

你最后的结论是错误的。在请求
JavaIPRES'a-\b-vik'
(或您使用的任何引用)时,您只需请求解析一个不存在的名称。

我认为JVM缓存解析的名称。您可以通过将networkaddress.cache.ttl和networkaddress.cache.negative.ttl系统属性设置为0来关闭此功能

本文作者的功劳:


在我的macbook pro中尝试了该代码。面对同样的情况,我认为您的主机名末尾有一个额外的空格,请尝试使用java IpRes“a-b-vik”或从主机名中删除空格。我也尝试过这样做,但没有效果。不确定这是否是问题所在。此外,如果我请求一个不存在的名称,我会得到java.net.UnknownHostException。但是用反斜杠我不明白。