Javaで次のような関数呼び出しを行ったとします。
try {
System.out.println("My address=" + java.net.InetAddress.getLocalHost().toString());
} catch (UnknownHostException e) {
e.printStackTrace();
}
私のメインのマシンでは、正常にホスト名を表示します。
ところが、ホスト名を日本語にすると、UnknownHostExceptionをはくようです。
このあたりはJavaの実装が甘いのではないかと思ったりもします。
解決方法として、Java1.4から導入されたjava.net.NetworkInterfaceクラスを用いて、
まず、NICを取得する。
java.util.Enumeration enuIfs = NetworkInterface.getNetworkInterfaces();
while (enuIfs.hasMoreElements())
{
NetworkInterface ni = (NetworkInterface)enuIfs.nextElement();
}
次に、それぞれのNICに対して、IPアドレス、ホスト名を取得する
java.util.Enumeration enuAddrs = ni.getInetAddresses();
while (enuAddrs.hasMoreElements())
{
InetAddress in4 = (InetAddress)enuAddrs.nextElement();
in4.getHostAddress();
in4.getHostName();
}
こうすれば、当然ながらExceptionは発生しません。
ただし、getHostName()では日本語のホスト名ではなく、やっぱりIPアドレスが取得されます。