Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Probleme mit Exceptionbehandlung (https://www.delphipraxis.net/4580-probleme-mit-exceptionbehandlung.html)

steppo 5. Mai 2003 11:51


Probleme mit Exceptionbehandlung
 
Hallo Leute!
Ich habe ein Problem bei der Behandlung einer Exception.
Ich benutze die Internetkomponenten Clientsocket und Serversocket, um eine Verbindung zwischen zwei Rechner herzustellen.
Soweit funktioniert auch alles.

Problem:
Kann eine Verbindung aus irgend einem Grund nicht hergestellt werden, so wird eine Exception der Klasse ESocketError durch das System generiert. Damit das nicht durch das System passiert(was eine Fortsetzung des Programmes verhindert) fange ich diese Exception ab.
Das Problem dabei ist allerdings, das der Rest der Procedur nicht weiter ausgeführt wird.
Quelltext anbei

procedure Tfrm_Client.ClientSocket1Error(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin

case ErrorCode of
10049:
raise
ESocketError.Create('Sie haben eine ungültige Adresse eingegeben.' +
' Beachten sie bitte, dass eine IP - Adresse folgender schreibweise unterliegt.' + ' XXX.XXX.XXX.XXX'
+ #10#13 + 'z.B.: 172.0.0.1');

10061: raise
ESocketError.Create('Die Serveranwendung läuft nicht auf dem angegebenen Server, oder die Portnummer ist falsch.!');

10065: raise
ESocketError.Create('Es besteht keine Verbindung zum Netz.');
end;

Ab hier wird nach dem Aufrufen der Exception nicht mehr ausgeführt!!!

Memo_Client.Lines.Add('Verbindung zu ' + stralledaten[i].aDomain +
' fehlgeschlagen!');

Memo_Client.Lines.Add(' ');

inc(i);

cmd_ProcessBeginClick(nil);
end;

Dezipaitor 5. Mai 2003 12:33

sobald du raise ....
ausführst wird das Programm bzw die Procedure unterbrochen, und erst an der Stelle weitergemacht, wo diese Exception abgefangen wird.

versuche doch mal
um den Case Block
eine Try anweisung zu setzen

also so:

proc ....
try
case .... of
end;
finally
(was auf jeden fall ausgeführt werden soll)
end;
(was auf jeden fall ausgeführt werden soll)
end;

nach finally wird dann alles wieder normal ausgeführt.

man könnte auch nur dann etwas machen wenn eine exception ausgelöst wird:

proc ....
try
case .... of
end;
except
(was bei einer Exception passieren soll)
raise; //wiederholt die letzte Exception
end;
(was auf jeden fall ausgeführt werden soll, wenn kein Raise da steht!)
end;

steppo 5. Mai 2003 13:07

danke läuft jetzt besser. muss dennoch ein paar verbessurngen vornehmen. danke

...
sobald du raise ....
ausführst wird das Programm bzw die Procedure unterbrochen, und erst an der Stelle weitergemacht, wo diese Exception abgefangen wird.



durch den aufruf der exception und durch die anweisungen im finally teil bearbeite ich doch die exception (fange ich den fehler doch ab). ODER?


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:22 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