我已经得到机器的主机名,如下所示:
InetAddress.getLocalHost().getHostName();
但是,当我安装最新的JDK(jdk1.7.0_04)时,上面的代码简单地返回了LOCALHOST.我检查过/ etc / hosts(它的linux),并在那里说:
127.0.0.1 localhost redbull
升级前一直返回REDBULL.所以我改变了这一点
127.0.0.1 redbull localhost
相反,它开始返回REDBULL没有问题.
有没有更好的方式来做这项工作?
解决方法
嗯,我想到把这个标记为dup,但是我发现唯一的答案是建议你使用InetAddress.getLocalHost().getHostName().坦白说,在这种情况下,我认为应该返回“localhost”.而我认为这些答案是正确的,因为真的没有纯Java的方式来做(至少没有一个可移植回旧的JRE).
我们使用JNI来实现这一点.我们在Mac OS 10.4,SCDynamicStoreCopyLocalHostName()在老的Mac OS,Win32上的GetComputerName(),gethostname()其他地方调用SCPreferencesGetHostName().
当然,您可以在Unix机器上简单地调用/ bin / hostname,或者在Windows上查看环境变量COMPUTERNAME.您是否觉得更好地调用JNI或执行另一个程序,这是一个判断调用.
对于什么是值得的,我们在Mac OS上不调用gethostname()的原因是因为Mac执行了一个奇怪的动态主机名,其中gethostname()将返回主要以太网设备的反向DNS.如果我把Mac直接插入我的电缆调制解调器,我会得到一个客户10-42-21-42的主机名,或者我的有线电视提供商决定在其DNS中设置我的PTR记录.相反,转到首选项将使您得到由用户确定的稳定的主机名.