hi,
bei meinem Protokoll für die Kommunikation über Sockets habe ich es so gelöst das wenn Daten vom Client zum Server gesendet werden wird erst ein Ping zum Server gesendet. Der Server antwortet mit einem Pong. Wenn der Client den Pong bekommt sendet er die Daten.
Nur leider funktioniert die umsetzung nicht wirklich.....
Daten senden (TMyClient)
Delphi-Quellcode:
//Sende ping und warte 5 sek auf antwort
ping := TCommandHandling.Create(cmdPing);
s := ping.SendFrames;
fClient.Socket.SendBuf(PChar(s)^,length(s));
StartTime := now + 2.2*(2.2/86400.0);
//Ping gesendet warte auf Pong
while (not fIsPongOk) and (StartTime > now) do
begin
sleep(1);
application.ProcessMessages;
end;
ping.Free;
Pong
Delphi-Quellcode:
procedure TMyClient.OnGetDataSocket(Socket: TCustomWinSocket;
Cmd: TCommandHandling);
begin
if cmd.GetCmd = cmdPong then
fIsPongOk := true
else
fOnGetData(cmd);
end;
Dachte mir eventuell einen Thread zu erstellen Inbound/Outbound, oder nur eine Klasse mit einem Thread der die aufgabe Eingang/Ausgang löst. Was meint ihr?
Habe vor den Ablauf wie volgt zu lösen.....
Delphi-Quellcode:
Client Server
Sende Ping -> ist es ein ping
<- sende pong
Warte auf Pong
sende daten ->
Müsste es mit einem Thread lösbar sein oder mit 2 (Eingang - Ausgang)?