Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Indy10: Problem wenn ein Client Verbindung vom Server trennt (https://www.delphipraxis.net/72010-indy10-problem-wenn-ein-client-verbindung-vom-server-trennt.html)

McMorton 23. Jun 2006 17:02


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:
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;
Dannach starte ich den Server.
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:
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;
Nun kann ich Daten senden und empfangen. Das funktioniert alles einwandfrei.
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:
procedure TServer.IndyDisconnect(aContext: TIdContext);
begin
 self.FServer.Active := false;
 self.FServer.Bindings.Clear;
 self.FServer.Active := true;
end;
So funktioniert es. Aber das geht ja nicht, wenn man mehrere Verbindungen hat. Ich möchte die anderen Verbindungen ja behalten.

Ich hoffe mir kann, trotz des langen und konfusen Textes, jemand helfen.

McMorton 26. Jun 2006 07:00

Re: Indy10: Problem wenn ein Client Verbindung vom Server tr
 
Hat den keiner eine Idee?


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:38 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