Entwickler-Ecke

Internet / Netzwerk - IdTCPClient: Exceptions komplett abfangen


LittleBen - So 05.02.12 22:23
Titel: IdTCPClient: Exceptions komplett abfangen
Guten Abend,
habe folgendes Problem: Wenn ich eine Verbindung zu einem Host aufbauen will, der nicht erreichbar ist, dann kommen natürlich Fehlermeldungen, die aber abgefangen werden sollen. Das sollte eigentlich kein Problem sein...ist aber eins :D
Verbindung aufbauen:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
ClientSocket:= IdTCPClient.TIdTCPClient.Create(Application);
 try
  ClientSocket.Host:= '192.xxx';
  ClientSocket.Port:= 10001;
  ClientSocket.ReadTimeout:= 2000;

  try
   ClientSocket.Connect(2000);
  except
   // Meine Versuche, die Exceptions abzufangen, folgen
  end;
 finally
  ClientSocket.Free;
 end;


Nun habe ich versucht, die Exceptions so abzufangen (die 3 Möglichkeiten habe natürlich einzeln getestet):

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
  except
   // 1: 
   on E: EIdConnClosedGracefully do
   begin
    showmessage('Fehler');
    exit;
   end;
   
   // 2:
   on E: EIdSilentException do 
   begin
    showmessage('Fehler');
    exit;
   end;

   // Zuletzt einfach so
   showmessage('Fehler');
   exit; 
  end;


Wenn ich das Erste teste, dann kommt: "Socket-Fehler # 11001 Host nicht gefunden"
Beim 2. Versuch kommt die Fehlermeldung, die beim Ersten abgefangen wurde: "Die Verbindung wurde erfolgreich geschlossen" (sowie beim 3. Versuch)

Was mache ich da falsch? Wie muss ich es denn sonst machen?

Viele Grüße,
Littleben


jaenicke - So 05.02.12 22:49

Ich gehe mal davon aus, dass du es ohne Debuggen mit Delphi getestet hast?

Normalerweise gibt es zwei Möglichkeiten unbekannte Exceptions abzufangen:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
on E: Exception do
  ShowMessage(E.Message);

// oder, falls auch Exceptions kommen, die keine Nachfahren von Exception sind:
on E: TObject do
  ...


LittleBen - Mo 06.02.12 14:31

Wenn ich das so mache, dann kommt die Fehlermeldung "Die Verbindung wurde erfolgreich geschlossen", da diese ja nicht mehr mit EIdConnClosedGracefully abgefangen wird.


jaenicke - Mo 06.02.12 15:11

Das konnte ich nicht reproduzieren. Hättest du einmal ein kleines Beispielprojekt? :gruebel:
// EDIT:
Oder einen Screenshot von der Fehlermeldung wie die aussieht?


LittleBen - Di 07.02.12 15:38

o.O Huuch...?! Auf einmal funktionierts :?: :gruebel: Umso besser :D Vielen Dank!!