Java: Ping absetzen und Rückgabe einlesen

java-johnny

Grünschnabel
Kann mir jemand einen Tipp zu folgendem Problem geben? Bin für jeden Hinweis dankbar.

Ich möchte in einer Java-Anwendung (unter Windows) verschiedene Remote-Server anpingen und die Return-Codes auswerten (also alles was der Ping zurückgibt). Meine Fragen:

1. Wie greife ich in Java (1.5) am besten auf (Windows-)Betriebssystem-Befehle (ping) zu? Ich weiß, dass sowas früher schwer war, aber mittlerweile gibts doch Möglichkeiten.

2. Wichtig: Wie lese ich die Ping-Antwort/Return-Code ein?
 
Hallo!

Also du müsstest den ping Befehl entweder über Runtime.getRuntime().exec(...) oder über den ProcessBuilder ausführen und dann dessen Ausgabe Parsen:
Java:
/**
 * 
 */
package de.tutorials;

import java.io.BufferedReader;
import java.io.InputStreamReader;

/**
 * @author Tom
 * 
 */
public class PingExample {

    /**
     * @param args
     */
    public static void main(String[] args) throws Exception {

        ProcessBuilder processBuilder = new ProcessBuilder(new String[] {
                "ping", "www.tutorials.de" });
        Process process = processBuilder.start();
        BufferedReader bufferedReader = new BufferedReader(
                new InputStreamReader(process.getInputStream()));
        String line;
        while ((line = bufferedReader.readLine()) != null) {
            System.out.println(line);
        }
        bufferedReader.close();
    }
}

Du könntest auch die Ping-Funktionalität verwenden die schon in Java (5) eingebaut ist:
Java:
/**
 * 
 */
package de.tutorials;

import java.net.InetAddress;

/**
 * @author Tom
 * 
 */
public class PingExample {

    /**
     * @param args
     */
    public static void main(String[] args) {
        try {
            System.out.println(InetAddress
                    .getByName("www.tutorials.de")
                    .isReachable(5000));
            System.out.println("Host is reachable");
        } catch (Exception e) {
            System.out.println("Host is not reachable");
            e.printStackTrace();
        }
    }
}

//Edit: korrigiert

Gruß Tom
 
Der Beitrag ist zwar schon ein wenig sehr alt aber ich würde mal behaupten, dass die beiden sysouts im zweiten Beispiel vertauscht sind bzw. wäre folgendes Konstrukt nicht besser?

Java:
boolean reachable = false;
		
try
{
	reachable = InetAddress.getByName("www.tutorials.de").isReachable(5000);
}
catch (Exception e)
{
	e.printStackTrace();
}

System.out.println((reachable) ? "Host ist reachable" : "Host is NOT reachable");

Gruß

Sebastian
 
Zuletzt bearbeitet:
Zurück