Bitte auf diese Frage beziehen:Warum erhält Java die zwischengespeicherte Version des Hostnamens?
Wie Sie sehen können, bin ich mit dieser Methode den Namen des Computers zu erhalten:
private InetAddress getFirstNonLoopbackAddress(boolean preferIpv4, boolean preferIPv6) throws SocketException {
Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces();
while (en.hasMoreElements()) {
NetworkInterface i = en.nextElement();
for (Enumeration<InetAddress> en2 = i.getInetAddresses(); en2.hasMoreElements();) {
InetAddress addr = en2.nextElement();
if (!addr.isLoopbackAddress()) {
if (addr instanceof Inet4Address) {
if (preferIPv6) {
continue;
}
return addr;
}
if (addr instanceof Inet6Address) {
if (preferIpv4) {
continue;
}
return addr;
}
}
}
}
return null;
}
Der Anrufer:
InetAddress ip = getFirstNonLoopbackAddress(true, false);
this.machineName = ip.getCanonicalHostName();
Aber das Ergebnis ist, ich bekomme den alten Rechnernamen, bevor ich ihn in Ubuntu ändere.
Wie kann ich den tatsächlichen Rechner/Host-Namen wie in/etc/hostname Datei erhalten?
Gibt es eine Möglichkeit Java zu vermeiden, die aus dem Gerät einen Namen bekommen? Muss ich dazu den '/ etc/hostname /' öffnen? Indem ich meinen DNS auf einen anderen Server lege, bekomme ich jetzt nur noch die IP-Adresse der Maschine ... seltsam! –
Wenn Sie Ihren DNS-Server ändern, wird der DNS-Cache in Ihrem Betriebssystem aktualisiert, das ist normal und Sie erhalten die richtige IP-Adresse. –
Eine mögliche Lösung, wie in der ursprünglichen Frage (AskUbuntu) gezeigt, ist das Hinzufügen eines externen IP-Eintrags in '/ etc/hosts' mit dem Namen, den ich anzeigen möchte. Java wird es nicht mehr an den DNS-Server stellen. –