Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Ping und Daten Verwerten (https://www.delphipraxis.net/118235-ping-und-daten-verwerten.html)

gasty 5. Aug 2008 11:51

Re: Ping und Daten Verwerten
 
Also ich habe jetz eine Lösung gefunden :D Aber wieder ein neues Problem :wall:
Der Ping an sich funktioniert, aber es dauert ziemlich lange.
Ich habe den ping code jetz so geändert:
Delphi-Quellcode:
  if x = 1 then
    begin
      host:='www.google.de';
      code := ping(host,hopcount,rtt,ipad);
      if code = 0 then begin // ping kam an
        shape1.Brush.color := cllime;
      end else shape1.Brush.color := clred;
      x := 2;
    end;
  if x = 2 then
    begin
      host:='www.microsoft.com';
      code := ping(host,hopcount,rtt,ipad);
      if code = 0 then begin // ping kam an
        shape2.Brush.color := cllime;
      end else shape2.Brush.color := clred;
      x := 3;
    end;
usw.
Und wie gesagt der Ping an sich funktioniert, aber es dauert zu lange finde ich, kann ich das irgendwie beschleunigen?
Es sind 5 Pings und er braucht ca. 40 sek das finde ich zu lange, am inet kanns net liegen, hab DSL 16k :P

Kalfany 5. Aug 2008 13:07

Re: Ping und Daten Verwerten
 
wieso machst du überhaupt diese if verschachtelung, denn so wie dus hast werden die eh alle abgearbeitet

Delphi-Quellcode:
host:='www.google.de';
code := ping(host,hopcount,rtt,ipad);
if code = 0 then begin // ping kam an
  shape1.Brush.color := cllime;
end else
  shape1.Brush.color := clred;

host:='www.microsoft.com';
code := ping(host,hopcount,rtt,ipad);
if code = 0 then begin // ping kam an
  shape2.Brush.color := cllime;
end else
  shape2.Brush.color := clred;
usw...
so gehts doch auch oder nicht? und wenn du alle deine brushes vorher rot machst dann kannst du dir den else teil auch sparen.

5 pings gesammt oder 5 pings pro adresse?

gasty 5. Aug 2008 13:17

Re: Ping und Daten Verwerten
 
5 pings insgesamt, also 5 adressen die angepingt werden.
Ich werds mal ohne das if probieren.

geht auch, aber es ist immernoch zu langsam, kann man das irgendwie optimieren? oder geht es vielleicht mit indy schneller? aber ich hab keine ahnung wie ich mit indy pingen kann.

DeddyH 5. Aug 2008 13:26

Re: Ping und Daten Verwerten
 
Das Protokoll für Ping heißt ICMP, schau da mal in den Indys nach ;) . Außerdem könnte man Deinen Code noch ein wenig kürzen:
Delphi-Quellcode:
const sAdresses: array[0..4] of string = ('www.microsoft.de',
                                          'www.google.de',
                                          'www.delphipraxis.net',
                                          'german-bash.org',
                                          'www.sourceforge.net');
var i: integer;
    aShapes: array[0..4] of TShape;
begin
  aShapes[0] := Shape1;
  aShapes[1] := Shape2;
  aShapes[2] := Shape3;
  aShapes[3] := Shape4;
  aShapes[4] := Shape5;
  for i := 0 to 4 do
    if ping(sAdresses[i]) then
      aShapes[i].Brush.Color := clRed;
end;

gasty 5. Aug 2008 13:35

Re: Ping und Daten Verwerten
 
Also das es mit der ICMP Kompo was zu tun hat hab ich mir gedacht ^^
Aber wie benutze ich die denn?
Also bei Host kann man ja den namen eintragen, aber wie pingt man den dann an?

DeddyH 5. Aug 2008 14:00

Re: Ping und Daten Verwerten
 
Ich habe in der Firma leider kein Indy zur Verfügung. Wirf zur Not mal einen Blick in die Demos oder schau einfach mal, ob es eine Methode "Ping", "Execute" oder so gibt.

gasty 5. Aug 2008 14:07

Re: Ping und Daten Verwerten
 
Liste der Anhänge anzeigen (Anzahl: 1)
Also wenn ich ein icmp-client draufsetze und versuche das programm zu starten kommt immer ein Error - Bild angehängt.
Ich habe noch nichts verändert, nur den client auf die form gesetzt und versucht zu starten, brauch ich vielleicht noch etwas anderes als diese eine kompo?

DeddyH 5. Aug 2008 14:09

Re: Ping und Daten Verwerten
 
Da scheint irgend etwas mit Deinen Indies nicht zu stimmen. Hast Du unterschiedliche Versionen installiert?

gasty 5. Aug 2008 14:16

Re: Ping und Daten Verwerten
 
Eigentlich habe ich nur die 10er installiert. Am besten installier ich es nochma neu.
Und geht es eigentlich mit indy schneller als mit dem code den ich habe? wenn nicht kann ichs mir ja eigentlich sparen :P
Aber 30-40sec für 5 pings find ich viel zu lang, so max. 10sec sollte es dauern.

Ahja btw, hier die funktion vom ping, vlt kann man da irgendwo timeout zeit einstellen oder so?
ich blick da nicht so ganz durch.

Delphi-Quellcode:
function GetRTTAndHopCount(DestIpAddress:DWORD; HopCount :pointer; MaxHops: DWORD;
    RTT : pointer):boolean; stdcall; external 'iphlpapi.dll';

function ping(host:string; var hopCount, RTT:DWORD; var ipAd:string):DWORD;

// by retnyg
// returns 0 is successfully, otherwise errorcode
// overwrites values hopcount, rtt, and ipad
// hopcount: number of hops
// rtt: roundtrip time
// ipAd: numerical ip-value, if used with a hostname
  function GetIPAddress(const HostName: string): string;
  var
    R: Integer;
    WSAData: TWSAData;
    HostEnt: PHostEnt;
    Host: string;
    SockAddr: TSockAddrIn;
  begin
    Result := '';
    R := WSAStartup($0101, WSAData);
    if R = 0 then
      try
        Host := HostName;
        if Host = '' then
        begin
          SetLength(Host, MAX_PATH);
          GetHostName(@Host[1], MAX_PATH);
        end;
        HostEnt := GetHostByName(@Host[1]);
        if HostEnt <> nil then
        begin
          SockAddr.sin_addr.S_addr := Longint(PLongint(HostEnt^.h_addr_list^)^);
          Result := inet_ntoa(SockAddr.sin_addr);
        end;
      finally
        WSACleanup;
      end;
  end;

var ip: DWORD;
begin
  result:=0;
  hopCount:=0;
  RTT:=0;
  ipAd := GetIPAddress(host);
  ip := inet_addr(@ipAd[1]);
  if not GetRTTAndHopCount(ip, @hopCount, 30, @RTT) then result:=GetLastError;
end;

DeddyH 5. Aug 2008 14:41

Re: Ping und Daten Verwerten
 
Ich denke schon, dass das mit Indy schneller geht, der Code scheint eher eine Art Traceroute durchzuführen (wozu sonst Hopcount?).


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:55 Uhr.
Seite 2 von 4     12 34      

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