![]() |
IdIcmpClient für einen ping
Liebe DP :wink:
ich habe folgendes Problem: Ich möchte anhand von IP-Adressen prüfen ob ein Computer - wir setzen mal vorraus das keine Firewall den ping blockiert - online ist (sofern die IP denn auch stimmt). Ich habe das Forum durchsucht und bin auf die IdIcmpClient-Komponente des Indy-Packages gestoßen. Die verwende ich folgerndermaßen: ("Ping" ist eine Instanz der TIdIcmpClient)
Delphi-Quellcode:
Nun erhalte ich jedoch (ich muss sagen dass IMMER der erste Ping in meinem Programm an localhost geht (sinnlos, ich weiß, aber!)
Ping.Host := ComputerIP.Caption;
Ping.Ping(); if (Ping.ReplyStatus.BytesReceived > 0) then result := TRUE else result := FALSE; egal welche IP ich angebe - ob das nun xyz oder fff ist - ein Ergebnis das WAHR ist in meiner Funktion die oben beschrieben ist. Woran liegt denn der Fehler? mfg Sebi |
Re: IdIcmpClient für einen ping
Hallo,
zur Erfolgsprüfung solltes Du das entsprechende Ereignis nutzen:
Delphi-Quellcode:
Dort kannst Du dann auf Erfolg oder Misserfolg abfragen:
PingReply(ASender: TComponent; const AReplyStatus: TReplyStatus);
Delphi-Quellcode:
sPingLogResult sei hier eine global deklarierte Stringvariabel.
Case AReplyStatus.ReplyStatusType Of
rsEcho : Begin sPingLogResult := 'erfolgreich'; End; rsError : Begin sPingLogResult := 'Fehler'; End; rsTimeOut : Begin sPingLogResult := 'TimeOut'; End; rsErrorUnreachable : Begin sPingLogResult := 'nicht Erreichbar'; End; rsErrorTTLExceeded : Begin sPingLogResult := 'TTL überschritten'; End; End; |
Re: IdIcmpClient für einen ping
Hallo,
vielen Dank für deine Antwort! Ich implementiere meine Funktion in einer eigenen Unit und möchte deshalb wenn möglich alles auch in der Unit halten... Wenn ich meine Funktion allerdings abändere und so stattdessen den ReplyStatusType abfrage, funktioniert es wunderbar! Vielen Dank! Da der Titel ja recht allgemein gehalten ist, denke ich passt eine zweite Frage auch noch zu ihm: Mittels der IdIcmpClient die ich mit folgender Einstellung betreibe (ReadTimeOut 250), laggt das Programm wenn der Timer meine Komponenten (zur Zeit genau 2) zum Auffruf des Pings auffordert. Auch eine IdAntiFreeze (ohne Konfiguration -> IdleTimeOut 250) löst dies nicht... Was kann ich denn da tun? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:56 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz