Java本地主机名ip解析

时间:2016-03-18 16:27:21

标签: java macos dns localhost

我在我的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中运行。不知道我为什么要面对这个问题。有什么想法吗?

2 个答案:

答案 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/