![]() |
WinSock Error Anwendungsweit abfangen
Hallo zusammmen,
ich bin neu hier und habe gerade ein dringendes Problem. Ich habe mit der Komponente ClientSocket einseitig eine Verbindung aufgebaut (ich meine damit die Gegenstelle existiert zur Zeit nicht) und nach der Aktivierung kommt nach kurzer Zeit eine Exception "ESocketError". Wie kann ich diese Exception abfangen? Der folgende Code klappt nicht:
Code:
Da die Exception scheinbar nicht direkt sondern verzögert aufgerufen wird, und dann hat der Programmablauf die try-except-schleife wohl schon verlassen.
try
CS1.Active := True; except on ESocketError do CS1.Active := False; end; Ich meine, ich hätte früher mal ein Konstrukt gesehen, das Exceptions Anwendungsweit abfängt, bin mir aber nicht sicher und kann den alten Code auch nicht mehr finden. Hat jemand auf Anhieb eine Idee? Dank schon mal vorab. |
Re: WinSock Error Anwendungsweit abfangen
Bekommst Du die Exception nur wenn Du deine Applikation in der IDE startest
oder auch wenn Du sie ohne IDE startest. Die IDE zeigt Dir auch die Exceptions an wenn ein try.. except Block vorhanden ist. Diese Verhalten kann man aber abstellen, irgendwo bei den Compilereinstellungen. Grüße Klaus |
Re: WinSock Error Anwendungsweit abfangen
Ja, der Fehler kommt auch wenn ich die exe-Datei alleine (ohne IDE) starte. Er lautet: "Asyncroner Socket-Fehler 10061" Er tritt nur auf, wenn der entsprechende Gegenpart (WinSocket - Server) nicht erreichbar ist.
Ich habe inzwischen herausgefunden, dass er von dem TClientSocket - Ereignis "onError" erkannt wird. Das kann ich auch den Error-Code auslesen, allerdings kann ich die Fehlermeldung damit noch nicht unterdrücken. CS1 := TClientSocket1 :-)
Delphi-Quellcode:
Ich möchte halt ein Verhalten ereichen, das die Client-Komponente immer wieder den Verbindungsaufbau versucht, ohne dass der Anwender ständig die Fehlermeldung wegklicken muss.
procedure TForm1.CS1Error(Sender: TObject; Socket: TCustomWinSocket;
ErrorEvent: TErrorEvent; var ErrorCode: Integer); begin CS1.Active := False; Memo3.Lines.Add('Error...'+inttostr(ErrorCode)); end; Regelmäßiges probieren "CS1.Active := True" klappt ja schon, allerdings kommt dann halt jedes mal wenn es nicht erfolgreich ist die Fehlermeldung und die muss weggeklickt werdn :-( |
Re: WinSock Error Anwendungsweit abfangen
Aus der Hilfe:
Zitat:
Grüße Klaus |
Re: WinSock Error Anwendungsweit abfangen
Hey prima,
... manchmal kann die Welt so einfach sein, ErrorCode auf 0 setzen und schon ist die Welt in Ordnung. @Klaus01: Kurze Frage noch, woher hast Du die Hilfe, in der Delphihilfe zu Delphi 5.0 konnte ich nichts (aber wirklich gar nichts) über die WinSock - Komponenten finden. Trotzdem auf jeden Fall schon mal vielen Dank, das hat mir sehr geholfen. (Und einem Solidaritätslauf bei dem alle Helfer ehrenamtlich arbeiten zu einer zuverlässigeren Zeitmessung verholfen. - wen's interessiert: ![]() |
Re: WinSock Error Anwendungsweit abfangen
ich hatte nach TErrorEvent gesucht und nicht speziell nach WinSock
Grüße Klaus |
Re: WinSock Error Anwendungsweit abfangen
Tatsächlich,
hab's auch gefunden. manchmal ist der Trick zu wissen nach was man suchen muss. Vielen Dank noch mal. |
Re: WinSock Error Anwendungsweit abfangen
Wie wäre es denn einfach nach TClientSocket zu suchen und dort dann oben auf "Methoden" bzw. "Eigenschaften" zu gehen und sich dort zu den gesuchten Dingen weiter durch zu klicken?
|
Re: WinSock Error Anwendungsweit abfangen
Das wäre mein erster Schritt gewesen, aber wie ich schon geschrieben hatte war bei mir in der Delphi-Hilfe der Begriff TClientSocket weder mit F1 noch über die Suchfunktion der Hilfe zu finden.
Vielleicht liegts an der Version (Delphi 5 Standard) oder bei mir ist die Hilfe vielleicht nicht richtig installiert - keine Ahnung. Aber Problem ist ja gelöst. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:47 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz