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.