![]() |
Socket Ausgangsthread, sinvoll? (Ping / Pong)
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:
Pong
//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;
Delphi-Quellcode:
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?
procedure TMyClient.OnGetDataSocket(Socket: TCustomWinSocket;
Cmd: TCommandHandling); begin if cmd.GetCmd = cmdPong then fIsPongOk := true else fOnGetData(cmd); end; Habe vor den Ablauf wie volgt zu lösen.....
Delphi-Quellcode:
Müsste es mit einem Thread lösbar sein oder mit 2 (Eingang - Ausgang)?
Client Server
Sende Ping -> ist es ein ping <- sende pong Warte auf Pong sende daten -> |
Re: Socket Ausgangsthread, sinvoll?
habe gerade die warte zeit geändert
Delphi-Quellcode:
dann funktioniert es, aber ist das so auch die beste lösung?
StartTime := now + 3.2*(3.2/86400.0);
//Ping gesendet warte auf Pong while (not fIsPongOk) and (StartTime > now) do //Edit doch nicht :( scheint noch zu hängen ..... |
Re: Socket Ausgangsthread, sinvoll? (Ping / Pong)
habe es jetzt für den Client gelöst, nur für den Server muss ich mir noch was einfallen lassen.
Da ja beim Server mehrer Clients auflaufen und ich diese irgend wie auseinander halten muss...... Baue einfach noch eine Verbindung auf. Über diese schicke ich den Ping/Pong. Wenn ich ein Pong bekomme können daten gesendet werden, wenn kein Pong nach x sek kommt, werden die Daten in einem Buffer geschrieben und beim nächsten pong gesendet..... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:57 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz