java - 无法从 getHostName 获取主机名

标签 java

我正在尝试使用此方法获取主机名/计算机名。不幸的是,我只能获得 localhost 而不是其他计算机。

private String getHostName(String _strIP) {
    try {
        InetAddress inetAddress = InetAddress.getByName(_strIP);
        System.out.println("getHostAddress : " + inetAddress.getHostAddress());
        System.out.println("getHostName : " + inetAddress.getHostName());
        System.out.println("getCanonicalHostName : " + inetAddress.getCanonicalHostName());
        return inetAddress.getHostName();            
    } catch (UnknownHostException e) {
        e.printStackTrace();
    }
    return strDefaultHostName;
}

结果(不是本地主机)
getHostAddress : 192.168.2.139
getHostName : 192.168.2.139
getCanonicalHostName : 192.168.2.139

结果(本地主机)
getHostAddress : 127.0.0.1
getHostName : localhost
getCanonicalHostName : localhost

谢谢

最佳答案

我们已经大致确定了 tangens 答案中的问题所在。

我认为您可以通过将主机名放入主机文件中来解决这个问题。

%SystemRoot%\system32\drivers\etc\hosts

是您要查找的文件;本地主机在这里定义。您想为要解析的每个主机在其中放置一个名称和地址行。

我从来没有试过这个。如果它不起作用,你会拿回你的钱。

更新

以上是“快速破解”解决方案。这实质上意味着每当有人手动更改您感兴趣的主机的 IP 地址时,必须同时更改 hosts。任何想要访问这些主机的机器上的文件。

另一种选择是操作您自己的 DNS 服务器。当主机的地址发生变化时,您仍然需要更新 IP 地址,但您只需要在一个地方这样做,您就可以在整个网络中获得正向和反向名称解析。这需要更多的设置,但从长远来看更容易维护。

这是一个非常有用的引用:http://www.dns.net/dnsrd/servers/windows.html

他们提到“内置”Microsoft DNS 服务器是一个糟糕的解决方案(直到 Windows 2003 Server 中的那个),但至少提到了两种替代方案,一种是商业的,一种是免费的。 BIND 是目前将大部分 Internet 连接在一起的东西,在 DNS 方面,而且它们也有一个 Windows 端口真是太棒了。

关于java - 无法从 getHostName 获取主机名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1899288/

相关文章:

java - Wicket:创建指向数据表中行的动态 anchor 链接

java - 使用 Hibernate Envers 审核可嵌入实体

java - 邮件阅读问题?

java - 如何在 Java 中运行递归函数

java - GWT-SuggestBox 作为文本框?

java - 使用 perl 调用 jar 并使用 STDIN 传递变量

java - 如何在 Dropwizard 中对资源进行基本身份验证

Java Web 服务容器

java - 在分块然后合并 jar 文件时遇到问题

java - 升级 Firebase 后 Android Unresolved 依赖关系