Samstag, 14. August 2010

Ping ausführen

Viele kennen wahrscheinlich den Befehl ping aus der Windowskonsole. Mit diesem können testweise Datenpakete an eine bestimmte Adresse, an einen Computer im Netzwerk oder einen Server im Internet, gesendet werden.
Können die Datenpackete erfolgreich gesendet werden ist die Zieladresse erreichbar und eine entsprechende Antwort wird zurückgegeben.
Mit der Programmiersprache C# lässt sich solch eine Anfrage ebenfalls ganz leicht senden. Zuerst müssen wir im Projekt die dafür benötigte Klasse mittels using einbinden:
using System.Net.NetworkInformation;

Über die Funktion Send() der Klasse Ping kann ein Ping ausgeführt werden, die hier verwendete Überladung mit nur einem Parameter gibt die Zieladresse an (127.0.0.1 bezeichnet den lokalen Computer). Optional können weitere Parameter benutzt werden, gibt man einen 2. Parameter an, bezeichnet dieser beispielsweise das Zeitintervall in Millisekunden, in welchem auf Rückantwort gewartet werden soll.

Ping Sender = new Ping();
PingReply Result = Sender.Send("127.0.0.1");
if (Result.Status == IPStatus.Success)
    MessageBox.Show("Erfolg");
else
    MessageBox.Show("Fehler");

Kommentare:

  1. Danke

    funktioniert tadellos.

    AntwortenLöschen
  2. Zu empfehlen ist auch die Möglichkeit, asynchrone Pings loszuschicken. (Die automatisch in einem Hintergrund-Thread ausgeführt.)
    Man verknüpft dazu das Ping-Objekt mit einer Callback-Funktion.

    ping = new Ping();
    ping.PingCompleted += new PingCompletedEventHandler(Ping_PingCompleted);

    Dann kann man Pings losschicken mit:

    ping.SendAsync(target, 5000, null);

    Wenn das Ping zurück kommt, wird die Callback-Funktion aufgerufen. Im Beispiel die Methode Ping_PingCompleted().

    Das ist nützlich für grafische Anwendungen, damit keine Blockierungen entstehen, wenn Pings länger für eine Antwort brauchen.

    AntwortenLöschen
  3. kann mir das einer mal bitte erklären wo ich was einfügen soll?

    AntwortenLöschen
    Antworten
    1. Was meinst du? Halt da wo du es brauchst.
      Also z.B. wenn der Ping bei Programmstart erfolgen soll, in die Form_Create(). Bei Klick auf einen Button, in die Button_Click().

      Löschen
  4. Mit .NET 4.5 ist es noch einfacher geworden asynchrone Pings zu schicken:

    PingReply reply = await new Ping().SendPingAsync("127.0.0.1"); //machine name works too

    und dann weiter mit reply.Status == IPStatus....

    viele Grüße !
    michael

    AntwortenLöschen