360 Stimmen

Empfohlener Weg zur Ermittlung des Hostnamens in Java

Welche der folgenden Möglichkeiten ist die beste und portabelste, um den Hostnamen des aktuellen Computers in Java zu ermitteln?

Runtime.getRuntime().exec("hostname")

gegen

InetAddress.getLocalHost().getHostName()

20voto

Dan Ortega Punkte 1250

Nur ein Einzeiler ... plattformübergreifend (Windows-Linux-Unix-Mac(Unix)) [Funktioniert immer, kein DNS erforderlich]:

String hostname = new BufferedReader(
    new InputStreamReader(Runtime.getRuntime().exec("hostname").getInputStream()))
   .readLine();

Sie sind fertig!

14voto

Thomas W Punkte 13662

Umgebungsvariablen können auch ein nützliches Mittel sein -- COMPUTERNAME unter Windows, HOSTNAME auf den meisten modernen Unix/Linux-Shells.

Siehe: https://stackoverflow.com/a/17956000/768795

Ich verwende diese als "ergänzende" Methoden, um InetAddress.getLocalHost().getHostName() da diese Funktion, wie von mehreren Seiten angemerkt, nicht in allen Umgebungen funktioniert.

Runtime.getRuntime().exec("hostname") ist eine weitere mögliche Ergänzung. Zum jetzigen Zeitpunkt habe ich sie noch nicht verwendet.

import java.net.InetAddress;
import java.net.UnknownHostException;

// try InetAddress.LocalHost first;
//      NOTE -- InetAddress.getLocalHost().getHostName() will not work in certain environments.
try {
    String result = InetAddress.getLocalHost().getHostName();
    if (StringUtils.isNotEmpty( result))
        return result;
} catch (UnknownHostException e) {
    // failed;  try alternate means.
}

// try environment properties.
//      
String host = System.getenv("COMPUTERNAME");
if (host != null)
    return host;
host = System.getenv("HOSTNAME");
if (host != null)
    return host;

// undetermined.
return null;

7voto

Matt Sheppard Punkte 113439

Wenn Sie nicht gegen die Verwendung einer externen Abhängigkeit von Maven Central sind, habe ich gethostname4j geschrieben, um dieses Problem für mich zu lösen. Es verwendet einfach JNA, um die Funktion gethostname von libc aufzurufen (oder holt den Computernamen unter Windows) und gibt ihn als String zurück.

https://github.com/mattsheppard/gethostname4j

6voto

Der portabelste Weg, den Hostnamen des aktuellen Computers in Java zu ermitteln, ist der folgende:

import java.net.InetAddress;
import java.net.UnknownHostException;

public class getHostName {

    public static void main(String[] args) throws UnknownHostException {
        InetAddress iAddress = InetAddress.getLocalHost();
        String hostName = iAddress.getHostName();
        //To get  the Canonical host name
        String canonicalHostName = iAddress.getCanonicalHostName();

        System.out.println("HostName:" + hostName);
        System.out.println("Canonical Host Name:" + canonicalHostName);
    }
}

5voto

ThuVien247.net Punkte 59
hostName == null;
Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
{
    while (interfaces.hasMoreElements()) {
        NetworkInterface nic = interfaces.nextElement();
        Enumeration<InetAddress> addresses = nic.getInetAddresses();
        while (hostName == null && addresses.hasMoreElements()) {
            InetAddress address = addresses.nextElement();
            if (!address.isLoopbackAddress()) {
                hostName = address.getHostName();
            }
        }
    }
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X