![]() |
Delphi-Version: 5
Exception-Fenster trotz try..except bei Lesen von Socket.Handle
Moin,
ich habe, kurz gesagt, einen TCP-Server mit den Sockets geschrieben, mit dem sich verschiedene TCP-Clients verbinden können sollen. An folgender Stelle im Server möchte ich das Socket-Handle des Clients ermitteln und erhalte verständlicherweise eine Zugriffsverletzung, falls der Client in der Zwischenzeit die Verbindung geschlossen hat, daher wollte ich das abfangen wie folgt:
Delphi-Quellcode:
Ich kompiliere das Programm und führe die EXE aus (nicht in der IDE).
try
sh := Connection.Socket.Handle; except on e: Exception do ErrorList.Add('Socket-Handle konnte nicht ermittelt werden.', e.Message); end; Dass der try..except-Block ausgeführt wird, merke ich anhand des Eintrages in der ErrorList. Jedoch erhalte ich ebenfalls, und das verstehe ich nicht, ein Meldungsfenster zum Wegklicken. Das würde ich gern vermeiden, da das Programm auf einem Server eingesetzt werden soll, wo nicht ständig jemand die GUI betrachtet. Wie kann ich das bewerkstelligen? |
AW: Exception-Fenster trotz try..except bei Lesen von Socket.Handle
Welche Exception zeigt denn das Meldungsfenster? Vielleicht entsteht der Fehler an ganz anderer Stelle. Das müsste man aber mit einer Debugger-Session herausbekommen.
|
AW: Exception-Fenster trotz try..except bei Lesen von Socket.Handle
Am Socked/Connection gibt es bestimmt ein Property/Event, wo man steuern kann, dass die Meldung nicht angezeigt wird.
Hier wird aber nur auf das Handle zuegriffen, da würde ich die Exception auch woanders vermuten. Bei den Indy gibt/gab es z.B. die Möglichkeit Exceptions anzeigen zu lassen und dann anschließend das Programm normal weiterlaufen zu lassen, so als wäre nix gewesen. |
AW: Exception-Fenster trotz try..except bei Lesen von Socket.Handle
Soweit ich mich erinnerte hatte ich bei meinem Versuch damals (
![]() Wäre natürlich besser, wenn es eine richtige Lösung gäbe. |
AW: Exception-Fenster trotz try..except bei Lesen von Socket.Handle
Im Ereignis OnClientError kann man das über einen var-Parameter steuern.
Aber dieses Ereignis tritt nicht ein, weil ich ja auf einen nicht mehr existierenden Socket zugreife :(. Ich habe mal ein wenig verfolgt wo das hingeht. Da gibt es zunächst einen Getter GetHandle(), der die Forms-Funktion AllocateHwnd() aufruft. Das riecht mir nach Fenster, aber da kann ich ja schlecht was dran drehen. Die Exception lautet (ugf.) Fehler bei Lesen von Adresse 00000000 oder so ähnlich. Ich habe mittlerweile einen Workaround, indem ich im ClientDisconnect meinem Connection-Objekt den Status Disconnected gebe, dann kann ich's wenigstens abfangen, aber unpraktisch ist das mit der Exception dennoch. Danke trotzdem! Caps |
AW: Exception-Fenster trotz try..except bei Lesen von Socket.Handle
Die Exception hier abzufangen ist sowieso keine gute Lösung.
Bei dir knallt es ja, weil es nil/0 ist und damit auf den geschützten Speicher im den ersten 64K RAM zugreift, aber wenn da ein Wert drin stünde und der auf einen Speicher zeigen würde, der zufällig eine kompatible Speicherstruktur hätte, dann würde mit einem Handle weitergearbeitet, welches falsch/ungültig ist. |
AW: Exception-Fenster trotz try..except bei Lesen von Socket.Handle
Hm, stimmt auch wieder.
|
AW: Exception-Fenster trotz try..except bei Lesen von Socket.Handle
Zitat:
Mit ![]() So wie z.B. auch TApplication in der VCL Eines darstellt, um zentral SystemMessages zu empfangen. Auch TTimer nutzt nicht das HWND seines Owners, sondern jeder Timer hat sein eigenes internes Fenster für's WM_TIMER. (ich glaub im FMX wird mir einem MultimediaTmer intern gearbeitet, da der Windows-Timer eh nicht überall verfügbar ist) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:55 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