Autor Beitrag
LittleBen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 258
Erhaltene Danke: 4

Win 7, Mac OS
Delphi 7
BeitragVerfasst: So 05.02.12 22:23 
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:
ausblenden 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):
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19274
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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:
ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 258
Erhaltene Danke: 4

Win 7, Mac OS
Delphi 7
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19274
Erhaltene Danke: 1740

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 258
Erhaltene Danke: 4

Win 7, Mac OS
Delphi 7
BeitragVerfasst: Di 07.02.12 15:38 
o.O Huuch...?! Auf einmal funktionierts :?: :gruebel: Umso besser :D Vielen Dank!!