Hi,
bei meiner Anwendung muss immer eine Verbindung mit dem Server bestehen. Habe das früher mit den Sockets gemacht, da hat es so funktioniert. Jetzt wo ich das mit den Indys mache und alles auf Threads basiert, weis ich nicht ob das immer noch so funktionieren würde.
Das ist der Client Execute, gekürzt.
Delphi-Quellcode:
while not Terminated do begin
if not fClient.Connected then
try
fClient.Connect(1000);
except
end;
//Ping senden
if fClient.Connected then begin
cmd := TCommandHandling.Create(CMDPing);
try
fClient.WriteLn(cmd.SendFrames);
msg := fClient.ReadLn; //Antwort cmdPong
except
fClient.Disconnect; //Timeout, kein Pong bekommen.
end;
end;
//Text empfangen
if fClient.Connected then begin
try
try
IsTimeout := false;
msg := fClient.ReadLn;
except
IsTimeout := True;
end;
if not IsTimeout then begin
cmd := TCommandHandling.Create(CMDNone);
try
cmd.SetFrames(msg);
try
if Assigned(fOnRead) then
fOnRead(cmd);
except
//Fehler in OnRead abfangen
end;
finally
FreeAndNil(cmd);
end;
end;
finally
fCS.Leave;
end;
end;
sleep(100);
end;
Und der Server -> OnRead
Delphi-Quellcode:
AThread.Connection.ReadTimeout := 1000;
fCS.Enter;
try
try
msg := AThread.Connection.ReadLn;
except
exit;
end;
finally
fCS.Leave;
end;
cmd := TCommandHandling.Create(CMDPong);
try
cmd.SetFrames(msg);
if cmd.GetCmd = CMDPing then
AThread.Connection.WriteLn(cmd.SendFrames) //Pong senden
else begin //rest weiter geben
if Assigned(fOnRead) then
fOnRead(AThread, cmd);
end;
finally
FreeAndNil(cmd);
end;
Soweit funktioniert der Test bei 2 Computer. Gibt es noch was wo drauf ich achten muss oder eventuell was ich besser machen kann.
Mfg