Home » Tipps & Tricks » Netzwerk/Internet » Netzwerk » Pingen mithilfe der Indy-Komponenten

Pingen mithilfe der Indy-Komponenten

Folgender Artikel zeigt, wie man mithilfe der Indy-Komponenten einen Host pingen kann. Ab Delphi 6 sind diese Komponenten bei Delphi dabei. Besitzer älterer Versionen können Sie unter www.indyproject.org kostenlos herunterladen (siehe Verweise). Die benötigte Komponente trägt den Namen IdIcmpClient.Erstelle einen OnReply-Eventhandler und schreibe folgendes in die Ereignis-Procedure:

procedure TForm1.IdIcmpClient1Reply(ASender: TComponent;
  const AReplyStatus: TReplyStatus);
var
  sTime: String;
begin
  if (AReplyStatus.MsRoundTripTime = 0) then
    sTime := '< 1'
  else
    sTime := '=';

  Listbox1.Items.Add(Format('%d bytes from %s: icmp_seq=%d ttl=%d time%s%d ms',
                            [AReplyStatus.BytesReceived,
                             AReplyStatus.FromIpAddress,
                             AReplyStatus.SequenceId,
                             AReplyStatus.TimeToLive,
                             sTime,
                             AReplyStatus.MsRoundTripTime]));
end;

Du kannst dann folgendermaßen einen Server anpingen:

procedure TForm1.Button1Click(Sender: TObject);
var
 i: Integer;
begin
 IdIcmpClient1.Host := 'www.delphi-treff.de';
 for i := 1 to 4 do
 begin
   IdIcmpClient1.Ping;
   Application.ProcessMessages;
 end;
end;

Die Eigenschaft ‚Host‘ enthält den Server. Die Methode ‚Ping‘ führt den Ping aus. Die Ergebnisse werden der Listbox hinzugefügt. In diesem Fall werden vier Ping-Versuche gestartet.
Ein Ping-Ergebnis enthält 5 Werte.

  • AReplyStatus.BytesReceived gibt die Größe des Packets zurück.AReplyStatus.
  • FromIpAddress gibt die IP-Adresse des gepingten Hosts an.
  • AReplyStatus.SequenceId enthält eine fortlaufende ID. Bei mehreren Ping-Versuchen sollte die ID durchgängig sein, da dies ein Zeichen dafür ist, dass kein Packet verloren ging.
  • AReplyStatus.TimeToLive – Passiert das Paket einen Router wird dieser Wert um 1 dekrementiert. Ist dieser Wert bei 0 angelangt, stirbt das Paket. So wird sichergestellt, dass ein Paket nicht endlos im Internet verbleibt.
  • AReplyStatus.MsRoundTripTime gibt die Zeit zurück, die ein Packet vom Sender zum Host und wieder zurück gebraucht hat.