【发布时间】:2016-07-05 12:15:50
【问题描述】:
我在我的 macbook pro 上遇到了一个奇怪的问题,即主机名到 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
具有相同 /etc/hosts 文件的相同程序可以在我朋友的 mac 上运行。不知道为什么我会面临这个问题。有什么想法吗?
【问题讨论】:
-
在我的 macbook pro 中尝试了代码。面对同样的事情。
-
我认为您的主机名末尾有多余的空格,请尝试使用 java IpRes "a-b-vik" 或从您的主机名中删除空格