![]() |
Fehlerbeseitigung von PING-Fehlern
Hallo,
ich habe die Indy-ICMP-Komponente verwendet um pings zu senden. dies klappt auch ohne probleme, aber ich erhalte nach Pingfehlern(aber auch erst nach 10 oder mehr fehlversuchen) eine MsgBox in dem ein SocketError steht. Könte mir jmd. verraten, wie ich diese fehlermeldung abfangen bzw. gar nicht erst anzeigen lassen kann? MfG Blue |
Re: Fehlerbeseitigung von PING-Fehlern
Hi,
Indys lösen bei Fehlern ![]()
Delphi-Quellcode:
begin
//Pseudocode IdPing1.Host := 'www.delphipraxis.net'; try IdPing1.DoPing; except //Dieser Code wird ausgeführt wenn der Ping fehlschlägt On E: Exception do begin If E is ESocketError then HandleSocketError else UnhandledError; end; end; end; |
Re: Fehlerbeseitigung von PING-Fehlern
DANKE!!! :-D (für die SUPERSCHNELLE AW!!! :thumb: )
aber da wäre noch was ... ich find leider per suche nix darüber. problematisch ist, dass bei fehlschlagendem ping die anwendung freezed. die freezetime scheint dabei dem timeout zu entsprechen, welches bei 3 ping-versuchen 1500 ms beträgt. Wie kann ich den Ping in einen neuen thread lagern?! :gruebel: |
Re: Fehlerbeseitigung von PING-Fehlern
Du musst in deinem Thread-Objekt eigentlich nur eine neue Instanz von TIdPing (heißt es so?) anlegen.
Delphi-Quellcode:
Alle Angaben ohne Gewähr :mrgreen:
type
TPingOnceThread = class(TThread) private Pinger: TIdPing; FFinished: Boolean; FHostReachable: Boolean; FPingTime: Integer; public procedure Execute; override; constructor Create(HostAddr: String; CreateSuspended: Boolean = false); destructor Destroy; override; published property Finished: Boolean read FFinished default false; property HostReachable: Boolean read FHostReachable default false; property PingTime: Integer read FPingTime default -1; end; implementation constructor TPingOnceThread.Create(HostAddr: String; CreateSuspended: Boolean = false); begin inherited Create(true); FreeOnTerminate := false; Pinger := TIdPing.Create; Pinger.Host := HostAddr; If not CreateSuspended then Resume; end; destructor TPingOnceThread.Destroy; begin Pinger.Free; end; procedure TPingOnceThread.Execute; begin try FPingTime := Pinger.DoPing; //angenommen die Methode DoPing liefert das Ergebnis FHostReachable := true; except {Exception behandeln oder ignorieren} end; FFinished := true; end; |
Re: Fehlerbeseitigung von PING-Fehlern
Ich muss da Problem neu aufrollen ...
ich hatte den ersten SC nicht getestet. und ich muss sagen, er funzt nicht! Er findet weder ESocketError noch HandleSocketError... nunja ... ich poste mal den SC in der Hoffnung jmd kann mir helfen!
Delphi-Quellcode:
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ... IdIcmpClient, IdBaseComponent, IdComponent, IdRawBase, IdRawClient, IdException, ... ; ... begin { --- Alle xx Sekunden einen Ping senden um auf eine Internetverbindung zu prüfen --- } try pinger.Ping('a'); except On E: Exception do if E Is IDException.EIdSocketError then begin Showmessage('SOCKETERROR'); end else Showmessage('ELSE') end; end; So weit geht es, aber mir ist es nicht möglich, den Fehler "SocketError #10011" (glaube ich war es) abzufangen ... :spin2: MfG bLuE :gruebel: |
Re: Fehlerbeseitigung von PING-Fehlern
Kann mir den niemand sagen, wie ich die exception abfangen kann? :pale:
|
Re: Fehlerbeseitigung von PING-Fehlern
Hi,
Ich seh da kein Problem... dieser Code funktioniert bei mir wie erwartet:
Delphi-Quellcode:
Nur wenn das Programm in der IDE ausgeführt wird, erscheint der Exception-Dialog noch. Das Verhalten der IDE bei Exceptions kann man in D6 unter Hauptmenü => Tools => Debugger-Optionen ändern.
procedure TForm1.Button1Click(Sender: TObject);
begin ICMP.Host := 'www.delphipraXXXXXXXXis.de'; try ICMP.Ping('Delphi'); Memo1.Text := 'Ping: ' + IntToStr(ICMP.ReplyStatus.MsRoundTripTime); except On E: Exception do Memo1.Text := E.ClassName + #13#10 + E.Message; end; end; |
Re: Fehlerbeseitigung von PING-Fehlern
Danke, dass war die Lösung ... hatte nur icht gechecked, dass der error da,it gehandled wird ... dacht man beötigt dieses HandleSocket ...
Danke! Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:55 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