无法从getHostName获取主机名

Joe*_*jam 2 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;
}
Run Code Online (Sandbox Code Playgroud)

结果(不是localhost)

getHostAddress : 192.168.2.139
getHostName : 192.168.2.139
getCanonicalHostName : 192.168.2.139
Run Code Online (Sandbox Code Playgroud)

结果(localhost)

getHostAddress : 127.0.0.1
getHostName : localhost
getCanonicalHostName : localhost
Run Code Online (Sandbox Code Playgroud)

谢谢

Car*_*icz 5

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

我认为你可以通过将主机名放入主机文件中来解决问题.

%SystemRoot%\system32\drivers\etc\hosts
Run Code Online (Sandbox Code Playgroud)

是你要找的文件; localhost在这里定义.您希望为每个要解析的主机添加名称和地址行.

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


更新

以上是"快速入侵"解决方案.这基本上要求每当有人手动更改您感兴趣的主机的IP地址时,某人必须同时更改hosts要访问这些主机的任何计算机上的文件.

另一种方法是运行您自己的DNS服务器.当主机的地址发生变化时,您仍需要更新IP地址,但只需在一个地方进行更新,即可在整个网络中同时获得正向和反向名称解析.这需要更多的设置,但从长远来看更容易维护.

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

他们提到"内置"Microsoft DNS服务器是一个糟糕的解决方案(直到Windows 2003 Server中的一个),但提到至少两个选择,一个商业和一个免费.BIND目前正在将大部分互联网连接在一起,DNS智能化,而且它们也拥有Windows端口也很棒.