Hallo,
ich hatte vor einiger Zeit ein Client-Server-Konstrukt gebastelt, mit dem mehrere Rechner Systeminformationen (CPU,
RAM etc) an einen Server schicken.
Die Clients sind alle Windows Rechner, der Server wurde jetzt auf Linux umgestellt, sodass ich den Server mit Lazarus auf Linux kompiliert habe.
Zu Testzwecken ist der Server erstmal nur eine Konsolenanwendung und noch kein Dienst oder ähnliches.
Der Server erstellt einen Indy10
TCP-Server und geht dann in eine "Endlosschleife", in welcher er wartet.
Delphi-Quellcode:
procedure TMyServer.DoRun;
begin
Init();
while (not Terminated) do
begin
if KeyPressed then
if ReadKey = ^C then
begin
Log('Shutting down...');
Terminate;
end;
Sleep(2);
end;
Terminate;
end;
Die Initialisierung klappt auch wunderbar, der Server ist bereit, Verbindungen entgegenzunehmen.
Der "alte" Windows Client kann sich auch zum Server verbinden und Daten übertragen. Nach ca. 1-2 Sekunden stellt er jedoch immer eine neue Verbindung zum Server her.
Dies ist laut Client auch vorgesehen, wenn er keine aktive Verbindung feststellt:
Delphi-Quellcode:
if (TCPClient.Connected) then
//Irgendwas sinnvolles
else
//Reconnect
Nur stellt er in einer TimerLoop anscheinend jedesmal fest, dass TCPClient.Connected = false ist.
Im Server wird die
TCPServerDisconnect
anscheinend nicht aufgerufen, der Server kriegt den Disconnect nicht mit.
Woran könnte das liegen?
Viele Grüße!