Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   WinSock Error Anwendungsweit abfangen (https://www.delphipraxis.net/76629-winsock-error-anwendungsweit-abfangen.html)

mohikaner 7. Sep 2006 08:39


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:
  try
    CS1.Active := True;
  except
    on ESocketError do CS1.Active := False;
  end;
Da die Exception scheinbar nicht direkt sondern verzögert aufgerufen wird, und dann hat der Programmablauf die try-except-schleife wohl schon verlassen.

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.

Klaus01 7. Sep 2006 09:31

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

mohikaner 7. Sep 2006 09:38

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:
procedure TForm1.CS1Error(Sender: TObject; Socket: TCustomWinSocket;
  ErrorEvent: TErrorEvent; var ErrorCode: Integer);
begin
  CS1.Active := False;  
  Memo3.Lines.Add('Error...'+inttostr(ErrorCode));
end;
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.

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 :-(

Klaus01 7. Sep 2006 09:43

Re: WinSock Error Anwendungsweit abfangen
 
Aus der Hilfe:

Zitat:

Unit

ScktComp

type

TErrorEvent = (eeGeneral, eeSend, eeReceive, eeConnect, eeDisconnect, eeAccept);

TSocketErrorEvent = procedure (Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer) of object;

Description

The Sender parameter is the socket component that encountered the error.

The Socket parameter is the TCustomWinSocket object that receives the error notification.

The ErrorCode parameter is the error code returned by the Windows socket API call. Changing this to 0 within an error handler prevents an exception from being raised.
The ErrorEvent parameter indicates what Socket was attempting to do when the error occurred. It is of type TErrorEvent, which can have any of the following values:
Vielleicht hilft es.

Grüße
Klaus

mohikaner 7. Sep 2006 10:10

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: www.solilauf.de)

Klaus01 7. Sep 2006 10:13

Re: WinSock Error Anwendungsweit abfangen
 
ich hatte nach TErrorEvent gesucht und nicht speziell nach WinSock

Grüße
Klaus

mohikaner 7. Sep 2006 10:28

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.

Muetze1 7. Sep 2006 10:59

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?

mohikaner 7. Sep 2006 15:30

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 11:39 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