Hi!
Erstmal: Ich nutze
Indy 9
Ich bin gerade dabei ein Chat zu programmieren. Ich habe 1 Server und alle Clients verbinden sich mit dem.
Angenommen ich habe 2 Rechner.
Auf PC 1 läuft 1 Server und 1 Client. (Client ist mit Server verbunden).
Auf PC 2 läuft 1 Client (Mit dem Server auf PC 1 verbunden).
Soweit funktioniert es. Wenn ich nun den Client auf PC 2 schließe wird beim Server OnDisconnect aufgerufen und ich kann den Clienten aus der Userliste rausnehmen.
Wenn ich aber die LAN-Verbindung bei PC 2 trenne, denken der Client auf PC 2 und Server auf PC 1 immer noch sie seien verbunden!!
Gut, ich dachte sobald der Server etwas über die Leitung sendet sollte er ja merken das da was nicht hinhaut, aber nein! Der Server sendet fröhlich weiter! Nach einer Weile wird der Server und etwas träge... Und dann hat meine Delphi
IDE Windows lahmgelegt. Ich nehme an der Server schreibt in sowas wie einen Puffer.
Beim Clienten auf PC 2 kam beim Senden wenigstens ein Fehler... (Da freut man sich über einen Fehler!
)
Ich habe schon verschiedene Möglichkeiten probiert:
- vor dem Senden CheckForDisconnect
- vor dem Senden CheckForGracefulDisconnect
- ich habe jede Minute eine Anfrage geschickt und der Client sollte auf die Anfrage antworten. Allerdings ging das Zeitlich nicht: Der Server läuft in mehren Threads, er wartet auf irgenteine Info und im anderen Thread wollte der Server wissen ob der Client antwortet, irgentwie konnte sich der Client dann nicht einmal mehr einloggen (ich nehme mal an das der Server in mehreren Threads läuft, was soll sonst schiefgelaufen sein? )
Es ging alles nicht.
Wie kann ich also nun hinbekommen das der Server 100% mitbekommt wenn die Verbindung geschlossen ist, oder wie kann ich vor dem Schreiben (oder dabei) mitbekommen wenn die Verbindung beendet wurde.
Oder besser: Wie macht ihr sowas