我在我的macbook pro上遇到了一个奇怪的问题,其中主机名为ip resolution。这是代码,
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。所以这似乎是一个特定的问题。
奇怪的是,如果我使用' \'我能够让它工作。我的主机名中的任何地方。例如,
java IpRes "a-\b-vik'
127.0.0.1
具有相同/ etc / hosts文件的相同程序可以从我朋友的mac中运行。不知道我为什么要面对这个问题。有什么想法吗?
答案 0 :(得分:0)
您的主持人表无效。主机表是一种将ipaddresses映射到一个或多个名称的映射。请尝试以下方法:
127.0.0.1 localhost a-b-vik
你的最后结论是错误的。在询问java IpRes 'a-\b-vik'
(或您使用的任何引号)时,您只需要求解析不存在的名称。
答案 1 :(得分:0)
我认为JVM缓存已解析的名称。您可以通过将networkaddress.cache.ttl和networkaddress.cache.negative.ttl系统属性设置为0来关闭此功能。
归功于本文作者:
http://www.myhowto.org/java/42-understanding-host-name-resolution-and-dns-behavior-in-java/