AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Indy 10.6.5040 TCPServer Serverschliessen und Client Verbindungen trennen
Thema durchsuchen
Ansicht
Themen-Optionen

Indy 10.6.5040 TCPServer Serverschliessen und Client Verbindungen trennen

Ein Thema von Cyberaxx · begonnen am 22. Dez 2013 · letzter Beitrag vom 3. Apr 2014
 
Benutzerbild von Cyberaxx
Cyberaxx

Registriert seit: 15. Jul 2005
311 Beiträge
 
Delphi XE5 Professional
 
#1

Indy 10.6.5040 TCPServer Serverschliessen und Client Verbindungen trennen

  Alt 22. Dez 2013, 01:34
Hallo,

gibt es eine saubere Lösung Client verbindungen zu trennen wenn der TidTCPServer geschlossen wird?


Ein einfaches idTCPServer1.active := False reicht hier scheinbar nicht, denn dann friert das Programm ein. Ganz selten bekomme ich aber auch mal die Meldung "Die Verbindung wurde erfolgreich geschlossen" aber auch wirklich nur sehr selten und das Programm friert dennoch ein.
Wenn jeder Client von sich aus die Verbindung beendet und ich dann das Programm schliesse lässt es sich auch ohne Probleme beenden.

Die Suche und auch alle Demo Programme die ich gefunden habe bringen mich dabei leider auch nicht weiter. Im Form Close habe ich bereits alles bisher gefundene einmal probiert leider bisher ohne Erfolg. Beende ich das Programm ohne vorher idTCPServer1.active := False aufzurufen endet es in eine access violation. Denke mal das die Threads natürlich noch laufen werden und sie daher kommt.

Ich poste einfach mal mein FormClose
Delphi-Quellcode:
procedure TServerMainForm.FormClose(Sender: TObject; var Action: TCloseAction);
var
  I: Integer;
begin
  if IdTCPServer.Active then
  begin
// while IdTCPServer.Contexts.LockList.Count > 0 do
// begin
// TIdContext(IdTCPServer.Contexts.LockList[0]).Connection.IOHandler.CloseGracefully;
// end;

    Memo1.Lines.Add(Format('%d connected Clients', [IdTCPServer.Contexts.LockList.Count]));
    if IdTCPServer.Contexts.LockList.Count > 0 then
    begin
      for I := 0 to IdTCPServer.Contexts.LockList.Count -1 do
      begin
        //TIdContext(IdTCPServer.Contexts.LockList[i]).Connection.IOHandler.CloseGracefully;
        //TIdContext(IdTCPServer.Contexts.LockList[i]).Connection.DisconnectNotifyPeer;
        //TIdContext(IdTCPServer.Contexts.LockList[i]).Connection.Disconnect;
        //TIdContext(IdTCPServer.Contexts.LockList[i]).Connection.IOHandler.DiscardAll;
        //TIdContext(IdTCPServer.Contexts.LockList[i]).Connection.IOHandler.CheckForDisconnect(False, True);
        //TIdContext(IdTCPServer.Contexts.LockList[i]).Connection.CheckForGracefulDisconnect(False);
      end;
    end;

    //IdTCPServer.Contexts.UnlockList;
    IdTCPServer.Active := False;
  end;
end;
Egal was ich versuche der Server trennt den Client nicht und der Client bekommt auch keine Meldung über einen disconnect.

Rufe ich TIdContext(IdTCPServer.Contexts.LockList[i]).Connection.Disconnect; auf dann wird am Server das OnDisconnect aufgerufen aber das war es dann auch schon.

Vielen Dank im vorraus wenn mir jemand bei dem Problem helfen könnte, ich selbst bin ratlos.
Daniel
Das Aufwachen aus einem boesen Traum muss einen nicht erleichtern. Es kann einen auch erst richtig gewahr werden lassen, was man Furchtbares getraeumt hat, vielleicht sogar welcher furchtbaren Wahrheit man im Traum begegnet ist!
  Mit Zitat antworten Zitat
 


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 03:20 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