![]() |
Indy10: Problem wenn ein Client Verbindung vom Server trennt
Hallo
Ich brauche mal Hilfe bei meinem TCPServer (Indy 10) Am besten erklär ich erstmal was ich mache Der Server kann sich mit mehreren Clients verbinden. Auf welchen Ports er auf Clients warten soll stell ich so ein:
Delphi-Quellcode:
Dannach starte ich den Server.
procedure TServer.setnewPort( Port: Integer);
var aNumberofBindings: Integer; begin self.FIndyServer.Bindings.Add; aNumberofBindings := self.FServer.Bindings.Count; self.FIndyServer.Bindings.Items[aNumberofBindings-1].Port := Port; end; Wenn sich nun eine Client verbindet, dann merke ich mir in dem Eventhandler des OnConnect-Events von Indy wer sich da verbunden hat:
Delphi-Quellcode:
Nun kann ich Daten senden und empfangen. Das funktioniert alles einwandfrei.
procedure TServer.IndyConnect(aContext: TIdContext);
var aPort: Integer; begin //Lies Port, auf den sich verbunden wurde aPort := aContext.Binding.Port; //Erstelle Objekt zum Speichern des Ports in der Verbindungsliste des Indy-Servers aContext.Data := TClientPort.Create; //(Simples Objekt, das den Port enthalten wird) //Speicher Port im Objekt (aContext.Data as TClientPort).Port := aPort; end; Die Clients unterscheide ich Anhand des Ports auf dem sie sich Verbunden haben (ist ja in dem TClientPort Objekt gespeichert) Aber wenn nun ein Client die Verbindung beendet, wird ja das OnDisconnect Event beim Server geworfen Wenn ich dort nichts weiter mache, dann bekomme ich ein Problem wenn sich der Client auf dem Port nochmal verbinden will. Die Verbindung wird vom Server zwar entgegengenommen, man kann auch Daten empfangen, aber der Server kann nicht mehr senden. Anscheinend müssen das Binding für diese Verbindung igentwie zurückgesetzt werden. Wenn ich nur einen 1 zu 1 Verbindung habe (ein Server, ein Client), dann kann ich einfach schreiben:
Delphi-Quellcode:
So funktioniert es. Aber das geht ja nicht, wenn man mehrere Verbindungen hat. Ich möchte die anderen Verbindungen ja behalten.
procedure TServer.IndyDisconnect(aContext: TIdContext);
begin self.FServer.Active := false; self.FServer.Bindings.Clear; self.FServer.Active := true; end; Ich hoffe mir kann, trotz des langen und konfusen Textes, jemand helfen. |
Re: Indy10: Problem wenn ein Client Verbindung vom Server tr
Hat den keiner eine Idee?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:07 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