AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi IdIcmpClient für einen ping
Thema durchsuchen
Ansicht
Themen-Optionen

IdIcmpClient für einen ping

Ein Thema von 64Jabor · begonnen am 14. Mai 2009 · letzter Beitrag vom 14. Mai 2009
Antwort Antwort
64Jabor

Registriert seit: 9. Jan 2008
158 Beiträge
 
Delphi 7 Personal
 
#1

IdIcmpClient für einen ping

  Alt 14. Mai 2009, 14:24
Liebe DP

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:
 Ping.Host := ComputerIP.Caption;
 Ping.Ping();
 if (Ping.ReplyStatus.BytesReceived > 0) then result := TRUE
  else result := FALSE;
Nun erhalte ich jedoch (ich muss sagen dass IMMER der erste Ping in meinem Programm an localhost geht (sinnlos, ich weiß, aber!)
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
Sebastian
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#2

Re: IdIcmpClient für einen ping

  Alt 14. Mai 2009, 14:33
Hallo,

zur Erfolgsprüfung solltes Du das entsprechende Ereignis nutzen:PingReply(ASender: TComponent; const AReplyStatus: TReplyStatus); Dort kannst Du dann auf Erfolg oder Misserfolg abfragen:
Delphi-Quellcode:
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;
sPingLogResult sei hier eine global deklarierte Stringvariabel.
  Mit Zitat antworten Zitat
64Jabor

Registriert seit: 9. Jan 2008
158 Beiträge
 
Delphi 7 Personal
 
#3

Re: IdIcmpClient für einen ping

  Alt 14. Mai 2009, 14:48
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?
Sebastian
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:34 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz