AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Fehlerbeseitigung von PING-Fehlern
Thema durchsuchen
Ansicht
Themen-Optionen

Fehlerbeseitigung von PING-Fehlern

Ein Thema von Bluemeus · begonnen am 23. Jan 2005 · letzter Beitrag vom 2. Feb 2005
Antwort Antwort
Benutzerbild von Bluemeus
Bluemeus

Registriert seit: 1. Dez 2004
Ort: Erfurt
16 Beiträge
 
Delphi 7 Enterprise
 
#1

Fehlerbeseitigung von PING-Fehlern

  Alt 23. Jan 2005, 12:17
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
Stephan
  Mit Zitat antworten Zitat
Benutzerbild von Dani
Dani

Registriert seit: 19. Jan 2003
732 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Fehlerbeseitigung von PING-Fehlern

  Alt 23. Jan 2005, 12:50
Hi,

Indys lösen bei Fehlern Delphi-Referenz durchsuchenExceptions aus. Die kannst du mit einem try...except Block abfangen.

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;
Dani H.
At Least I Can Say I Tried
  Mit Zitat antworten Zitat
Benutzerbild von Bluemeus
Bluemeus

Registriert seit: 1. Dez 2004
Ort: Erfurt
16 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Fehlerbeseitigung von PING-Fehlern

  Alt 23. Jan 2005, 12:56
DANKE!!! (für die SUPERSCHNELLE AW!!! )


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?!
Stephan
  Mit Zitat antworten Zitat
Benutzerbild von Dani
Dani

Registriert seit: 19. Jan 2003
732 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Fehlerbeseitigung von PING-Fehlern

  Alt 23. Jan 2005, 13:31
Du musst in deinem Thread-Objekt eigentlich nur eine neue Instanz von TIdPing (heißt es so?) anlegen.

Delphi-Quellcode:
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;
Alle Angaben ohne Gewähr
Dani H.
At Least I Can Say I Tried
  Mit Zitat antworten Zitat
Benutzerbild von Bluemeus
Bluemeus

Registriert seit: 1. Dez 2004
Ort: Erfurt
16 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Fehlerbeseitigung von PING-Fehlern

  Alt 25. Jan 2005, 18:05
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 ...

MfG bLuE
Stephan
  Mit Zitat antworten Zitat
Benutzerbild von Bluemeus
Bluemeus

Registriert seit: 1. Dez 2004
Ort: Erfurt
16 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Fehlerbeseitigung von PING-Fehlern

  Alt 30. Jan 2005, 18:05
Kann mir den niemand sagen, wie ich die exception abfangen kann?
Stephan
  Mit Zitat antworten Zitat
Benutzerbild von Dani
Dani

Registriert seit: 19. Jan 2003
732 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Fehlerbeseitigung von PING-Fehlern

  Alt 30. Jan 2005, 23:32
Hi,
Ich seh da kein Problem... dieser Code funktioniert bei mir wie erwartet:

Delphi-Quellcode:
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;
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.
Dani H.
At Least I Can Say I Tried
  Mit Zitat antworten Zitat
Benutzerbild von Bluemeus
Bluemeus

Registriert seit: 1. Dez 2004
Ort: Erfurt
16 Beiträge
 
Delphi 7 Enterprise
 
#8

Re: Fehlerbeseitigung von PING-Fehlern

  Alt 2. Feb 2005, 17:08
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 von Dani:
Hi,
Ich seh da kein Problem... dieser Code funktioniert bei mir wie erwartet:

Delphi-Quellcode:
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;
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.
Stephan
  Mit Zitat antworten Zitat
Antwort Antwort


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 11:29 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