Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Socket Ausgangsthread, sinvoll? (Ping / Pong) (https://www.delphipraxis.net/111562-socket-ausgangsthread-sinvoll-ping-pong.html)

Jackie1983 5. Apr 2008 13:57


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:
  //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)?

Jackie1983 5. Apr 2008 14:02

Re: Socket Ausgangsthread, sinvoll?
 
habe gerade die warte zeit geändert
Delphi-Quellcode:
  StartTime := now + 3.2*(3.2/86400.0);
  //Ping gesendet warte auf Pong
  while (not fIsPongOk) and (StartTime > now) do
dann funktioniert es, aber ist das so auch die beste lösung?
//Edit doch nicht :( scheint noch zu hängen .....

Jackie1983 6. Apr 2008 12:26

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 03:33 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz