Thema: Delphi Ping received Bytes

Einzelnen Beitrag anzeigen

Benutzerbild von Moombas
Moombas

Registriert seit: 22. Mär 2017
Ort: bei Flensburg
525 Beiträge
 
FreePascal / Lazarus
 
#5

AW: Ping received Bytes

  Alt 17. Mai 2018, 15:09
Dann bin ich "raus" denn der Teil gehörte zu dem, den ich mir aus dem Internet zusammen geschustert habe, da ich von den Indy Komponenten keine große Ahnung habe.

Hätte es nun so geschrieben:
Delphi-Quellcode:
//Oberer Block
  lstReplies.Items.Add('Filiale: ' + edt_host1.Text);
  lstReplies.Items.Add('Gerät : ' + device);
  lstReplies.Items.Add('IP : ' + IP);
  lstReplies.Items.Add('Dauer : ' + inttostr(strtoint(edCount.Text)*60) + ' Pings' + ' = ~' + inttostr(trunc(strtoint(edCount.text)*1.083)) + ' Min.');
  lstreplies.TopIndex := lstreplies.Items.Count-1;
  //Zeit definieren
  times := timetostr(now());
  ms := 0;
  try
    // Host festlegen
    ICMP.Host := IP;
    // Ping so oft durchführen wie bei 'Anzahl der Pings' festgelegt
    for i := 1 to strtoint(edCount.text)*60 do begin
      Sleep(1000);
      elapsed.Caption := timetostr(now() - strtotime(times));
      datetimetostring(formattedDateTime, 'dd.mm.yyyy hh:mm:ss', now());
        // Ping senden
        ICMP.Ping;
        if ICMP.ReplyStatus.ReplyStatusType = rsEcho then
          begin
            // got some data, connection is up
            datetimetostring(formattedDateTime, 'dd.mm.yyyy hh:mm:ss', now());
            lstReplies.Items.Add(formattedDateTime + ' - ' + Format('Antwort von %s: Bytes=%d Zeit%s%dms TTL=%d',
            [ICMP.ReplyStatus.FromIpAddress,
            ICMP.ReplyStatus.BytesReceived,
            sTime,
            ICMP.ReplyStatus.MsRoundTripTime,
            ICMP.ReplyStatus.TimeToLive]));
            //Werte für Durschschnittszeitberechnung sammeln
            ms := ms + strtoint(split(split(Format('%s%dms',[sTime,ICMP.ReplyStatus.MsRoundTripTime]), '=', 1), 'm', 0));
          end
          else if ICMP.ReplyStatus.ReplyStatusType = rsTimeout then
          begin
            // have a timeout, link is down
            lstReplies.Items.Add(formattedDateTime + ' - ' + 'Zeitüberschreitung der Anforderung');
          end
          else
          begin
            // some other response, do something else...
          end;
        lstreplies.TopIndex := lstreplies.Items.Count-1;
    end;
  finally
    // Button Ping wieder auf Enabled=True
    btnPing.Enabled := True;
    lstReplies.Items.Add('');
    lstReplies.Items.Add('Ping Statistik für ' + IP + ':');

    ms := trunc(ms / (i-1));
    lstReplies.Items.Add('Durschnittliche Zeit: ' + inttostr(ms)+ 'ms' );
    lstreplies.TopIndex := lstreplies.Items.Count-1;
  end;
Bekomme beim Ausführen dann aber den Fehler "ungültige Gleitkommaoperation". Kann das aber aktuell nicht sehen bzw. das Programm hängt sich auf.

Edit: Ohne den Sleep(1000) funktioniert es aber dann natürlich kein Ping jede Sekunde und somit viel zu schnell.
Mit Sleep(1000) zeigt er nicht die einzelnen neuen Zeilen an und das Programm scheint abgestürzt zu sein, läuft aber noch.


Edit2: Über einen Timer anstatt einer Schleife läuft es Einwandfrei -.-

Geändert von Moombas (17. Mai 2018 um 15:51 Uhr)
  Mit Zitat antworten Zitat