Hallo zusammen,
ich experiementiere schon seit Tagen mit den o.g. Komponenten rum. Ich habe eine Serverapplikation und 3 verschiedene Clients.
Ein Client nimmt Daten aus einer
DB und schickt diese zum Server. Dort werden diese Daten an alle verbundenen Clients verschickt und die letzten Daten für neue Clients immer zwischengespeichert.
Ein weiterer Client verbindet sich in Abständen von 5 Sekunden zum Server, sendet ein "HELO" und bekommt dann die Daten des ersten Clients...
Einen dritten Client habe als Chatclient ausgelegt, der einmal ein Connect zum Server macht und die Verbindung hält bis das Programm geschlossen wird.
Wenn ich alle Clients so programmiere, dass beim starten eine Verbindung zum Server geöffnet wird und diese erst beim beenden des Clients geschlossen wird, funktioniert alles bestens. Nur wenn aus irgendwelchen Gründen die Verbindung zum Server verloren geht, bekomme ich den Reconnect nicht mehr hin
Also dachte ich mir, ich lege die ersten beiden Clients so aus, dass diese immer nur in bestimmten Abständen zum Server connecten und dann ihre Daten senden bzw. empfangen und anschließend wieder disconnecten. Leider funktioniert das auch nicht zuverlässig.
- Beim ersten Client sollte das alle 3-4 Minuten passieren. Der erste Connect funktioniert, aber keine weiteren.
- Beim zweiten Client funktionieren im Schnitt etwa 20 Connect`s und danach ist Schluss (alle 5 Sekunden)
Nur der 3.te Client der dauerhaft verbunden ist funktioniert weiterhin. Ich muss Client 1 und 2 neu starten und dann geht das Spiel von vorne los...
Am liebsten wäre mir eine Lösung, bei der alle Clients verbunden bleiben. Wenn dann irgendwie die Verbindung zusammenbricht (z.B. Server beendet) sollte der Client weiter versuchen einen Reconnect durchzuführen.
Leider finde ich keine Lösung. Ich habe auch schon im Forum und in Nachbarforen gesucht und nichts gefunden. Viele Beispiele beziehen sich auch auf Indy9....
Kann mir jemand bitte bei dem Problem behilflich sein? Evtl. hat auch schoneinmal jemand eine Reconnect Routine für diese Komponenten umgesetzt?
Die Routine zum connecten ist wie folgt aufgebaut und wird in einem Timer aufgerufen, allerdings noch mit einer if-Abfrage gekoppelt (es wird nicht bei jedem Timer-Event connected):
Delphi-Quellcode:
try
with IdTCPClient1 do
begin
connect;
IOHandler.WriteLn('HELO:client xy');
sleep(200);
IOHandler.WriteLn('INFO:' + text);
disconnect;
end;
except
// Fehler auf Form anzeigen
end;
Ich danke Euch schon einmal im voraus...
Andreas