Forum: Netzwerke
by schwa226,
5. Jan 2011
Habe die OnExecute des Servers jetzt so umgebaut.
Jetzt haut er den Client wieder raus und der Server kann beendet werden.
Mal schauen ob da noch was ist...
procedure TIndeed_Server.OnExecute(AContext: TIdContext);
var
Active_Client : TIndeed_Client;
begin
Active_Client := TIndeed_Client(AContext.Data);
Forum: Netzwerke
by schwa226,
5. Jan 2011
Nochmal ich!
Jetzt bin ich auf noch ein Problem gestoßen:
Der Server läuft und der Client wartet auf Daten:
dTCPClient.IOHandler.ReadBytes(Buf, 16, False);
Nun wird der Server beendet mit
if Assigned(fTCP_Server) then
begin
Forum: Netzwerke
by schwa226,
5. Jan 2011
Es ist ein Programm, dass mehrere Protokolle unterstützen soll.
Auch ein UDP Server ist dabei.
Diese laufen natürlich parallel.
Die Verschidenen Programme laufen dann wieder bei ein paar Funktionen/Datenquellen zusammen.
Habe es schon anders versucht, also einfach mit der Komponente auf der MainForm.
Da wird aber alles mächtig kompliziert.
Forum: Netzwerke
by schwa226,
5. Jan 2011
Danke, aber das CloseGracefully hat nicht funktioniert.
So klappt es:
TIdContext(Active_Client.AContext).Connection.IOHandler.CloseGracefully;
TIdContext(Active_Client.AContext).Connection.IOHandler.DiscardAll;
Also erst Verbindung trennen und dann die Daten per DiscardAll Verwerfen.
Es wird dann ganz normal die OnDisconnect aufgerufen und der Server lässt sich beenden.
Ob's...
Forum: Netzwerke
by schwa226,
5. Jan 2011
Wo finde ich das CloseGracefully?
Im TIdTCPServer oder TIdContext?
Weiter Versuche haben gezeigt, dass der Thread hängen bleibt, wenn ich bei einem Clienten ein Disconnect durchgeführt hatte.
TIdContext(Active_Client.AContext).Connection.Disconnect
Wenn dies einmal gemacht wurde kann man den Server nicht mehr beenden.
Aber irgendwie muss ich ja Clients von der Server Seite her...
Forum: Netzwerke
by schwa226,
5. Jan 2011
Hi,
ich habe ein kleines Problem wo ich nicht draufkomme.
Ich habe einen Thread, der einen TIdTCPServer im constructor erstellt.
Wenn der Thread terminiert wird, wird der TIdTCPServer.Active auf False gesetzt und danach sollte TIdTCPServer.Free ausgeführt werden.
Wenn nun kein Client verbunden war geht das ohne Probleme.
Wenn aber ein Client verbunden war/ist bleibt es bei...