AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Probleme mit Exceptionbehandlung
Thema durchsuchen
Ansicht
Themen-Optionen

Probleme mit Exceptionbehandlung

Ein Thema von steppo · begonnen am 5. Mai 2003 · letzter Beitrag vom 5. Mai 2003
Antwort Antwort
steppo

Registriert seit: 31. Dez 2002
235 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

Probleme mit Exceptionbehandlung

  Alt 5. Mai 2003, 11:51
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;
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#2
  Alt 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;
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
steppo

Registriert seit: 31. Dez 2002
235 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3
  Alt 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?
  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:57 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