我一直在获得机器的主机名如下:
InetAddress.getLocalHost().getHostName();
Run Code Online (Sandbox Code Playgroud)
但是,当我放入最新的JDK(jdk1.7.0_04)时,上面的代码只返回LOCALHOST.我检查了/ etc/hosts(它的linux),它说:
127.0.0.1 localhost redbull
Run Code Online (Sandbox Code Playgroud)
在升级之前它一直在返回REDBULL.所以我把它改成了
127.0.0.1 redbull localhost
Run Code Online (Sandbox Code Playgroud)
相反,它开始返回REDBULL没有问题.
是否有更好的方法使这项工作?
好吧,我考虑过将其标记为重复,但我找到的唯一答案建议您使用 InetAddress.getLocalHost().getHostName(). 坦率地说,我认为在这种情况下应该返回“localhost”。我认为这些答案是正确的,因为实际上没有纯 Java 方法可以做到这一点(至少没有可以移植回旧版 JRE 的方法)。
我们使用 JNI 来完成此任务。我们SCPreferencesGetHostName()在 Mac OS 10.4+、SCDynamicStoreCopyLocalHostName()旧版 Mac OS、GetComputerName()Win32 以及gethostname()其他任何地方调用。
当然,您可以简单地/bin/hostname在 Unix 机器上调用或查看COMPUTERNAMEWindows 上的环境变量。这是一种判断调用,判断您是否觉得调用 JNI 或exec调用另一个程序更好。
无论如何,我们不在gethostname()Mac OS 上调用的原因是因为 Mac 执行了一个奇怪的动态主机名操作,其中gethostname()将返回主要以太网设备的反向 DNS。如果我将 Mac 直接插入电缆调制解调器,我将获得主机名customer-10-42-21-42或电缆提供商决定在其 DNS 中设置为我的 PTR 记录的任何内容。相反,转到首选项将为您提供由用户确定的稳定主机名。
| 归档时间: |
|
| 查看次数: |
3333 次 |
| 最近记录: |