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:
Und wie gesagt der Ping an sich funktioniert, aber es dauert zu lange finde ich, kann ich das irgendwie beschleunigen?
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. Es sind 5 Pings und er braucht ca. 40 sek das finde ich zu lange, am inet kanns net liegen, hab DSL 16k :P |
Re: Ping und Daten Verwerten
wieso machst du überhaupt diese if verschachtelung, denn so wie dus hast werden die eh alle abgearbeitet
Delphi-Quellcode:
so gehts doch auch oder nicht? und wenn du alle deine brushes vorher rot machst dann kannst du dir den else teil auch sparen.
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... 5 pings gesammt oder 5 pings pro adresse? |
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. |
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; |
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? |
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.
|
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? |
Re: Ping und Daten Verwerten
Da scheint irgend etwas mit Deinen Indies nicht zu stimmen. Hast Du unterschiedliche Versionen installiert?
|
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; |
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. |
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