![]() |
TClientsocket => OnDisconnect wird nicht ausgeführt
Hallo....
ich habe gerade ein großes Probelem... ich sitze gerade an meiner InternetCafé Software und merke, das wenn der Server verreckt, oder ich den Prozess kille, dass beim Clienten weder OnDisconnect oder OnError ausgeführt wird.. :wiejetzt: kann mir da jemand einen Rat geben? ( ausser, dass ich die Indys nehmen sollte :wall: :wall: :wall: ) |
Re: TClientsocket => OnDisconnect wird nicht ausgeführt
Wenn die clients an eine verreckte Verbindung was senden sollten, dann sollte ein "Software caused connection abort" kommen, sprich dann sollte ein OnError ausgelöst werden. Führ doch einfach eine Art Ping ein und deine Probleme sollten gelöst sein.
Ach ja - oder nutze die Indys :roll: |
Re: TClientsocket => OnDisconnect wird nicht ausgeführt
das stimmt..... nur ich will wenn der server verreckt, das sofort alle clients gesperrt werden.... (tun sie auch wenn der server normal beendet wird)....
und das zeite... ich hab es so gemacht, das beim onerror ereignis ein timer anspringt, der nach 60 sekunden wiederverbinden will.. nur das tut der nur wenns halt normal beendet wurde und wenn dr prozess gekillt wurde und der server neu gestartet wird findet er ihn nich und der timer bleibt stehen... hier mein onerror erignis:
Delphi-Quellcode:
procedure TForm1.ClientSocket1Error(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer); begin Errorcode := 0; scrollbox1.Color := clred; label12.Visible := true; label13.Visible := true; edit1.Visible := false; button4.Visible := false; timer2.Enabled := true; label15.Visible := true; label16.Visible := true; label17.Visible := true; label19.Visible := true; label20.Visible := false; //style form1.Top := 0; form1.Left := 0; form1.Height := screen.height; form1.Width := screen.Width; form1.BorderStyle := bsnone; form1.FormStyle := fsstayontop; form1.BringToFront; timer1.Enabled := false; end; |
Re: TClientsocket => OnDisconnect wird nicht ausgeführt
*Urgs*
Diese OnError Behandlung bringt mir gar nix. Zum einen schreibst du selber, dass dieses nicht ausgelöst wird und zum anderen muss ich mal anmerken, dass die Komponentenbenennung mehr als miserabel ist. Ich kann mir hier nix zusammen reimen. Auch ist die Frage das nicht vllt. allgemein in eine Methode zu packen die dann abhängig davon ob verbunden oder nicht die hier bearbeiteten Komponenten umstellt. Dann kannst du diese Methode im Connect und im Error/Disconnect aufrufen. Und dann muss ich unbedingt noch anmerken, dass das zugreifen auf Form Eigenschaften über ihre eigene globale Instanzenvariable völlig, naja, tödlich/giftig, etc ist. Also entferne so oder so bitte die gesamten "Form1." Dinger... Und dann empfiehlt es sich bei einem aufgetretenen Fehler den Socket zu schliessen. Meisten kann man im OnError nichts mehr mit dem Socket anfangen. Da er aber nicht selber geschlossen wird ist es vorteilhaft hier im OnError ein
Delphi-Quellcode:
aufzurufen. Schon dadurch sollte sogar im Fehlerfall dein OnDisconnect ordentlich aufgerufen werden.
Socket.Close;
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:36 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