プログラムを実行しているホストに関する情報が欲しいことがあります。通常はjava.lang.SystemのgetProperties()で得られるPropertiesを参照することになりますが、ホスト名等の情報を得ることはできません。
ホスト名やIPアドレスを取得するにはjava.net.InetAddressクラスを使用することになります。java.net.InetAddressは(ソースコードを見ていないのですがおそらく)Singletonパターンが使われています。インスタンスの取得の方法としてはメソッドが3つ用意されています。getLocalHost、getByName、getAllByNameの3つのstaticメソッドです。getByNameとgetAllByNameはホスト名が判っている時に使うものですから、何も判らない状態の場合はgetLocalHostを使用することになります。
java.net.InetAddress inet = java.net.InetAddress.getLocalHost();
これでjava.netInetAddressのインスタンスが得られますので、後はgetHostNameやgetHostAddress、getAddressといったメソッドを使用してホスト情報を取得します。例えば単にホスト名を標準出力に表示するプログラムだと次のようになるでしょうか。
import java.net.InetAddress;
import java.net.UnknownHostException;
public class HostName {
public static void main(String[] args) {
InetAddress inet = null;
try {
inet = InetAddress.getLocalHost();
} catch (UnknownHostException e) {
System.err.println(e);
System.exit(1);
}
System.out.println(inet.getHostName());
}
}
あまり芸の無いプログラムですが、ま、良しとしましょう。これを例えばWindows 2000で実行するとインターネットドメイン名ではなく、Windowsのホスト名が表示されます。LinuxやSolarisではインターネットドメイン名の形式で表示されるらしい(私は確認してませんが)です。RMIのサービスのbindに使うなどの用途を考えるとドメイン形式で表示されるほうがうれしい様におもいますね。