Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Problem bei IdIcmpClient (Ping) (https://www.delphipraxis.net/140707-problem-bei-idicmpclient-ping.html)

stho 24. Sep 2009 07:41


Problem bei IdIcmpClient (Ping)
 
Hallo Leute

Ich habe da ein ganz großes Problem :-( Ich möchte ein Programm schreiben was IPs der Reihe nach anpingt doch es hängt sich dauernd auf :-(

Hier mein Code:

Delphi-Quellcode:
IdIcmpClient1.ReceiveTimeout := StrToInt(floattoStr(JvSpinEdit1.Value));                  //Festlegen des Ping-Timeoutes (bei mir 50 ms)

  x1 := True;

  repeat
    x1 := FALSE;
    if (JvIPAddress1.AddressValues.Value1 < JvIPAddress2.AddressValues.Value1) then       //---Überprüft ob Start-IP kleiner als Ziel-IP (x1 = True)
    begin
      x1 := True;
    end
    else if (JvIPAddress1.AddressValues.Value1 = JvIPAddress2.AddressValues.Value1) and
            (JvIPAddress1.AddressValues.Value2 < JvIPAddress2.AddressValues.Value2) then
    begin
      x1 := True;
    end
    else if (JvIPAddress1.AddressValues.Value1 = JvIPAddress2.AddressValues.Value1) and
            (JvIPAddress1.AddressValues.Value2 = JvIPAddress2.AddressValues.Value2) and
            (JvIPAddress1.AddressValues.Value3 < JvIPAddress2.AddressValues.Value3) then
    begin
      x1 := True;
    end
    else if (JvIPAddress1.AddressValues.Value1 = JvIPAddress2.AddressValues.Value1) and
            (JvIPAddress1.AddressValues.Value2 = JvIPAddress2.AddressValues.Value2) and
            (JvIPAddress1.AddressValues.Value3 = JvIPAddress2.AddressValues.Value3) and
            (JvIPAddress1.AddressValues.Value4 < JvIPAddress2.AddressValues.Value4) then
    begin
      x1 := True;
    end;

    if not x1 then exit;                                                                      //Wenn IP-Adresse ungültig, ENDE


    //IP-Zuweisung:
    IdIcmpClient1.Host := JvIPAddress1.text;

   
    Application.ProcessMessages;

    //Anpingen
    IdIcmpClient1.Ping();                                                                  //========= HIER FEHLER ===============



    Application.ProcessMessages;


    HochzählenIP;                                                                           //Hier wird die IP um 1 erhöht, externe Funktion

    //Gib System Zeit
    Application.ProcessMessages;
  until (JvIPAddress1.text = JvIPAddress2.text)                                             //Solange ausführen bis Start-IP und Ziel-IP gleich sind
Die stelle an der er sich aufhängt habe ich markiert... für den ersten Ping brauch er gar nicht lange doch für jeden danach 1+ sec was mir persönlich viel zu langsam ist -.-

Bitte, wo habe ich was falsch gemacht? :wall:

Bernhard Geyer 24. Sep 2009 07:53

Re: Problem bei IdIcmpClient (Ping)
 
Wie wäre es wenn du Eventorientiert Programmierst und auf das Ergebnis des Pings im OnReply/OnStatus-Event wartest bevor du einen neuen Ping absetzt?

stho 24. Sep 2009 07:56

Re: Problem bei IdIcmpClient (Ping)
 
könntest du mir sagen wie ich das mache?
Also ich habe ja die möglichkeit mit der Komponente Rückgabewerte ab zu fangen:

Delphi-Quellcode:
procedure TForm1.IdIcmpClient1Reply(ASender: TComponent;
  const AReplyStatus: TReplyStatus);
begin

  //IP-Ping kommt zurück...
  if AReplyStatus.FromIpAddress <> '0.0.0.0' then
  begin
   
    Listbox1.Items.Add(AReplyStatus.FromIpAddress);
   
  end;

end;
Das tue ich ja. aber wie kann ich das in die obere funktion ein bauen?


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:46 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