AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Ping mit Reaktionszeit

Ping mit Reaktionszeit

Offene Frage von "rayj"
Ein Thema von rayj · begonnen am 18. Okt 2005 · letzter Beitrag vom 18. Okt 2005
Antwort Antwort
rayj

Registriert seit: 18. Okt 2005
46 Beiträge
 
#1

Ping mit Reaktionszeit

  Alt 18. Okt 2005, 11:32
Hi,
Ich bin neu hier, hab heute euer Forum durchgesucht, da ich einen Code zum Pingen brauche.

Ziel: Ein Programm, dass etwa 5-10 Ziele anpingt in einem Intervall von 10 Sekunden (mit Timer).
Diese Ziele sind Nodes in unserem Netzwerk (z.B. 1. Router--->Proxy-----inet----->2. Router--->Server). Das Programm überprüft dann alle 10 Sekunden, bis wo die Verbindungen in Ordnung sind, damit wir bei einem Ausfall sofort sehen, wo der Fehler liegt.

Die Reaktionszeit/Antwortszeit sollte auch angezeigt werden (in MS).
Ich habe es mit dem IdIcmpClient versucht, das pingen geht, allerdings krieg ich mit MsRoundTripTime immer 0.

Delphi-Quellcode:
function TForm1.ping(host: string; lbl: string): Boolean;
begin
IcmpClient.Host := host;
try
  IcmpClient.Ping();
  If IcmpClient.ReplyStatus.BytesReceived > 0 then begin
     TLabel(FindComponent(lbl)).Caption := 'OK ' + IntToStr(IcmpClient.ReplyStatus.MsRoundTripTime);
     TLabel(FindComponent(lbl)).Font.color := clGreen;
  end
except
     TLabel(FindComponent(lbl)).Caption := 'FEHLER!' +IntToStr(IcmpClient.ReplyStatus.MsRoundTripTime);
     TLabel(FindComponent(lbl)).Font.color := clRed;
end;
end;
Auch wenn ich das bei IcmpClientReply mache kommt nur 0.

Gut, dann hab ich folgenden Code versucht:
Delphi-Quellcode:
  type
  IPAddr = DWORD;

  PICMP_ECHO_REPLY = ^ICMP_ECHO_REPLY;
  ICMP_ECHO_REPLY = packed record
    Address : ULONG;
    Status : ULONG;
    RoundTripTime : ULONG;
    DataSize : WORD;
    Reserved : WORD;
    Data : Pointer;
  end;

  PIP_OPTION_INFORMATION = ^IP_OPTION_INFORMATION;
  IP_OPTION_INFORMATION = packed record
    Ttl : byte;
    Tos : byte;
    Flags : byte;
    OptionsSize : byte;
    OptionsData : Pointer;
  end;


  function IcmpCreateFile : DWORD; stdcall; external 'icmp.dll';
  function IcmpCloseHandle(const IcmpHandle : DWORD) : longbool; stdcall; external 'icmp.dll';
  function IcmpSendEcho(const IcmpHandle : DWORD;const DestinationAddress : IPAddr;const RequestData : Pointer;const RequestSize : WORD;const RequestOptions : PIP_OPTION_INFORMATION;const ReplyBuffer : Pointer;const ReplySize : DWORD;const TimeOut : DWORD) : DWORD; stdcall; external 'icmp.dll';
Aufruf:
Delphi-Quellcode:
procedure TForm2.Button1Click(Sender: TObject);
var
  hICMP : DWORD;
  pierWork : PICMP_ECHO_REPLY;
  dwSize : DWORD;

begin
  hICMP := IcmpCreateFile;
  if hICMP = INVALID_HANDLE_VALUE then exit;
  try
    dwSize := SizeOf(ICMP_ECHO_REPLY)+8;
    pierWork := AllocMem(dwSize);
    try
      if IcmpSendEcho(hICMP,MAKELONG(MAKEWORD(123, 123),MAKEWORD(123, 123)),nil,0,nil,pierWork,dwSize,1000) = 0 then
      begin
        ShowMessage('Nicht gefunden');
      end
      else
      begin
        ShowMessage('Gefunden');
      end;
    finally
      FreeMem(pierWork,dwSize);
    end;
  finally
    IcmpCloseHandle(hIcmp);
  end;
end;
Hab ich hier im Forum gefunden. Leider kommt immer die Nachricht "Gefunden", auch wenn es eine IP 100% nicht gibt

Kann mir einer helfen?

MfG
  Mit Zitat antworten Zitat
franktron

Registriert seit: 11. Nov 2003
Ort: Oldenburg
1.446 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#2

Re: Ping mit Reaktionszeit

  Alt 18. Okt 2005, 11:37
Zitat von rayj:
Die Reaktionszeit/Antwortszeit sollte auch angezeigt werden (in MS).
Ich habe es mit dem IdIcmpClient versucht, das pingen geht, allerdings krieg ich mit MsRoundTripTime immer 0.
Also das du immer 0 krigst ist normal da die Verbindung zu schneller für eine Zeitmessung ist kann man unter Unix bessersehn da ist die Auflösung wohl höher als unter Windows
Frank
Tux sein Lieblingsquellcode
While anzfische<TuxSatt do begin
Fisch:=TFisch.Create; Tux.EssenFisch(Fisch); Fisch.Free;inc(anzfische); end;
  Mit Zitat antworten Zitat
rayj

Registriert seit: 18. Okt 2005
46 Beiträge
 
#3

Re: Ping mit Reaktionszeit

  Alt 18. Okt 2005, 11:40
Zitat von franktron:
Zitat von rayj:
Die Reaktionszeit/Antwortszeit sollte auch angezeigt werden (in MS).
Ich habe es mit dem IdIcmpClient versucht, das pingen geht, allerdings krieg ich mit MsRoundTripTime immer 0.
Also das du immer 0 krigst ist normal da die Verbindung zu schneller für eine Zeitmessung ist kann man unter Unix bessersehn da ist die Auflösung wohl höher als unter Windows
Danke. Aber ich habe schon Programme in Delphi gesehen, die die Zeit genau in Millisekunden angaben. Gibts keine Möglichkeit?
MfG
  Mit Zitat antworten Zitat
franktron

Registriert seit: 11. Nov 2003
Ort: Oldenburg
1.446 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#4

Re: Ping mit Reaktionszeit

  Alt 18. Okt 2005, 11:47
doch aber wenn die zeit unter 1 ms fählt dann gibts nix mehr deshalb steht im Windows Ping ja auch <1ms
Frank
Tux sein Lieblingsquellcode
While anzfische<TuxSatt do begin
Fisch:=TFisch.Create; Tux.EssenFisch(Fisch); Fisch.Free;inc(anzfische); end;
  Mit Zitat antworten Zitat
rayj

Registriert seit: 18. Okt 2005
46 Beiträge
 
#5

Re: Ping mit Reaktionszeit

  Alt 18. Okt 2005, 11:49
Zitat von franktron:
doch aber wenn die zeit unter 1 ms fählt dann gibts nix mehr deshalb steht im Windows Ping ja auch <1ms
Aber unter 1ms kanns nicht sein..
Der Ping von meinem PC (Schweiz) zum Server in Wien dauert über Dos Ping gut 50-80 ms
  Mit Zitat antworten Zitat
franktron

Registriert seit: 11. Nov 2003
Ort: Oldenburg
1.446 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#6

Re: Ping mit Reaktionszeit

  Alt 18. Okt 2005, 13:46
Schau dir diesen Thread mal an da steht drin wie man das richtig macht
Frank
Tux sein Lieblingsquellcode
While anzfische<TuxSatt do begin
Fisch:=TFisch.Create; Tux.EssenFisch(Fisch); Fisch.Free;inc(anzfische); end;
  Mit Zitat antworten Zitat
Tubos

Registriert seit: 25. Feb 2004
Ort: Yspertal (Niederösterreich)
1.014 Beiträge
 
Delphi 7 Personal
 
#7

Re: Ping mit Reaktionszeit

  Alt 18. Okt 2005, 18:11
Zitat:
Aber unter 1ms kanns nicht sein..
Der Ping von meinem PC (Schweiz) zum Server in Wien dauert über Dos Ping gut 50-80 ms
Sicher kanns das sein. rayj hat dohc geschrieben:
Zitat:
Diese Ziele sind Nodes in unserem Netzwerk
Also nicht im Internet.
Lukas
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 12:25 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