DruckenMister WongFacebook

Pingen mithilfe der Indy-Komponenten

System Win9x, WinNT, Win2000, WinXP, Vista, Win7
Ab Delphi-Version Delphi 1
Letzte Änderung 28.09.2010

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.