AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Exception-Fenster trotz try..except bei Lesen von Socket.Handle

Exception-Fenster trotz try..except bei Lesen von Socket.Handle

Ein Thema von Caps · begonnen am 1. Jul 2020 · letzter Beitrag vom 1. Jul 2020
Antwort Antwort
Caps

Registriert seit: 23. Mär 2006
Ort: Leipzig
291 Beiträge
 
#1

Exception-Fenster trotz try..except bei Lesen von Socket.Handle

  Alt 1. Jul 2020, 12:24
Delphi-Version: 5
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:
try
  sh := Connection.Socket.Handle;
except on e: Exception do
  ErrorList.Add('Socket-Handle konnte nicht ermittelt werden.', e.Message);
end;
Ich kompiliere das Programm und führe die EXE aus (nicht in der IDE).

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?
"Der Mode cmCFS8 ist prohibitär und von mir entwickelt."
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
7.993 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Exception-Fenster trotz try..except bei Lesen von Socket.Handle

  Alt 1. Jul 2020, 12:40
Welche Exception zeigt denn das Meldungsfenster? Vielleicht entsteht der Fehler an ganz anderer Stelle. Das müsste man aber mit einer Debugger-Session herausbekommen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
36.998 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Exception-Fenster trotz try..except bei Lesen von Socket.Handle

  Alt 1. Jul 2020, 12:44
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014

Geändert von himitsu ( 1. Jul 2020 um 12:46 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.091 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Exception-Fenster trotz try..except bei Lesen von Socket.Handle

  Alt 1. Jul 2020, 12:58
Soweit ich mich erinnerte hatte ich bei meinem Versuch damals (https://www.delphipraxis.net/190482-...ockettest.html) eine Nachricht (ByeByeMeldeMichAb) vom Client zum Server geschickt, bevor der Client geschlossen wurde. Der Server hat dann den Client ignoriert.

Wäre natürlich besser, wenn es eine richtige Lösung gäbe.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Caps

Registriert seit: 23. Mär 2006
Ort: Leipzig
291 Beiträge
 
#5

AW: Exception-Fenster trotz try..except bei Lesen von Socket.Handle

  Alt 1. Jul 2020, 12:59
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
"Der Mode cmCFS8 ist prohibitär und von mir entwickelt."
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
36.998 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Exception-Fenster trotz try..except bei Lesen von Socket.Handle

  Alt 1. Jul 2020, 13:13
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
Caps

Registriert seit: 23. Mär 2006
Ort: Leipzig
291 Beiträge
 
#7

AW: Exception-Fenster trotz try..except bei Lesen von Socket.Handle

  Alt 1. Jul 2020, 13:16
Hm, stimmt auch wieder.
"Der Mode cmCFS8 ist prohibitär und von mir entwickelt."
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
36.998 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Exception-Fenster trotz try..except bei Lesen von Socket.Handle

  Alt 1. Jul 2020, 13:24
Zitat:
Das riecht mir nach Fenster
Ach ja, ich schätze die Komponente arbeitet mit Window-Messages und dafür braucht man ein Fenster.

Mit Delphi-Referenz durchsuchenAllocateHwnd kann man sich quasi ein unsichtbares MessageOnly-Window erstellen und dort einen Message-Handler registrieren,

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)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014

Geändert von himitsu ( 1. Jul 2020 um 13:27 Uhr)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 08:45 Uhr.
Powered by vBulletin® Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2020 by Daniel R. Wolf