好吧,我考虑过将此标记为 dup,但我发现的唯一答案建议您使用 InetAddress.getLocalHost().getHostName()
. 坦率地说,我认为在这种情况下应该返回“localhost”。我想,这些答案是正确的,因为实际上没有纯 Java 方法可以做到这一点(至少没有一种方法可以移植回旧的 JRE。)
我们使用 JNI 来实现这一点。我们调用SCPreferencesGetHostName()
Mac OS 10.4+、SCDynamicStoreCopyLocalHostName()
旧版 Mac OS、GetComputerName()
Win32 以及gethostname()
其他任何地方。
当然,您可以简单地调用/bin/hostname
Unix 机器或查看COMPUTERNAME
Windows 上的环境变量。这是一种判断,您是否觉得调用 JNI 或exec
ing 另一个程序更好。
对于它的价值,我们不调用gethostname()
Mac OS 的原因是因为 Mac 做了一个奇怪的动态主机名事情,gethostname()
它将返回你的主要以太网设备的反向 DNS。如果我将我的 Mac 直接插入我的电缆调制解调器,我会得到一个主机名,customer-10-42-21-42
或者我的电缆提供商决定在他们的 DNS 中设置为我的 PTR 记录的任何内容。相反,转到首选项将为您提供由用户确定的稳定主机名。