Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Sockets noch verbunden? Eine art ping.... (https://www.delphipraxis.net/110409-sockets-noch-verbunden-eine-art-ping.html)

Jackie1983 17. Mär 2008 20:12


Sockets noch verbunden? Eine art ping....
 
hi,

wie könnte man kurz und effektiv feststellen ob der client noch mit dem Server verbunden ist.
Weil es könnte ja mal passieren das jemand das Netzwerkkabel zieht.

Muss man das selber programmieren oder gibt es da villeicht schon fertige Methoden?

Fussball-Robby 17. Mär 2008 20:15

Re: Sockets noch verbunden? Eine art ping....
 
Der Serversocket hat das Ereignis OnClientDisconnect und der Clientsocket OnDisconnect.
Ich denke die Begriffe sind selbsterklärend.
Mfg

1234588 17. Mär 2008 20:28

Re: Sockets noch verbunden? Eine art ping....
 
ein ping pong zu schreiben ist imho einfach. server sendet ein ping, das der client nach einer gewissen zeit mit einem pong erwidern sollte

Fussball-Robby 17. Mär 2008 20:36

Re: Sockets noch verbunden? Eine art ping....
 
Es geht aber ja nicht darum, ein Ping zu senden, sondern generell zu prüfen ob der Server und der Client noch verbunden sind. Da ist die Verwendung von OnClientDisconnect & OnDisconnect um einiges einfacher.

Mfg

Jackie1983 17. Mär 2008 20:39

Re: Sockets noch verbunden? Eine art ping....
 
Zitat:

Zitat von Fussball-Robby
Der Serversocket hat das Ereignis OnClientDisconnect und der Clientsocket OnDisconnect.
Ich denke die Begriffe sind selbsterklärend.
Mfg

schon klar, dies wird aber nicht ausgelöst wenn z.b ein Netzwerkkabel gezogen wird...

Zitat:

Zitat von 1234588
ein ping pong zu schreiben ist imho einfach. server sendet ein ping, das der client nach einer gewissen zeit mit einem pong erwidern sollte

Hast du vielleicht ein konkrete idee, weil alle daten die bei mir ankommen werden in einer jobliste geschrieben. Per Thread werden die jobs abarbeitet.
Also müste ich warten bis der job kommt und dann ein pong schicken. Das kann aber vielleicht, je nach jobs, dauern.

1234588 17. Mär 2008 20:53

Re: Sockets noch verbunden? Eine art ping....
 
Zitat:

Zitat von Fussball-Robby
Es geht aber ja nicht darum, ein Ping zu senden, sondern generell zu prüfen ob der Server und der Client noch verbunden sind. Da ist die Verwendung von OnClientDisconnect & OnDisconnect um einiges einfacher.

Mfg

der client kann nur ein pong senden bzw. ein ping erhalten, wenn er noch mit dem server verbunden ist.


Jackie1983, ich wuerde die ping pong geschichte parallel ablaufen lassen, sodass es nicht von anderen taetigkeiten abhaenigig ist. noch ein tipp, um zu wissen welcher client ein pong gesendet hat, kannst du ja zum ping eine zufaellige zeichenkette senden die der client erwidern muss.
Zitat:

ping edf27tgiu
pong edf27tgiu
vll. kannst du es ja auch mit der addresse des clienten irgendwie loesen, weiß ich nicht genau. hab mich einfach zu wenig damit befasst. mit der zufaelligen zeichenkette wurde es zumindest im irc protokoll geloest :o)

Fussball-Robby 17. Mär 2008 21:21

Re: Sockets noch verbunden? Eine art ping....
 
Zitat:

Zitat von Jackie1983
Hast du vielleicht ein konkrete idee, weil alle daten die bei mir ankommen werden in einer jobliste geschrieben. Per Thread werden die jobs abarbeitet.
Also müste ich warten bis der job kommt und dann ein pong schicken. Das kann aber vielleicht, je nach jobs, dauern.

Dann prüfst du beim Empfangen des Strings, ob er 'Ping' enthält, und sendest dann Pong zurück. Enthält er kein 'Ping', dann fügst du ihn in die Job-Liste ein.

Mfg

Thomas83 20. Mär 2008 12:58

Re: Sockets noch verbunden? Eine art ping....
 
was meint ihr könnte man es so machen?
pseudocode
Delphi-Quellcode:
begin
  //Intervall einmal die minute
  ClientOnline := false;
  SendePing;
end;

...

ClientOnRead;
begin
  if is_pong then
    ClientOnline := true;
end;

Jackie1983 20. Mär 2008 22:51

Re: Sockets noch verbunden? Eine art ping....
 
oder gibt es eine bessere möglichkeit ein ping - pong umzusetzen....

Fussball-Robby 21. Mär 2008 10:22

Re: Sockets noch verbunden? Eine art ping....
 
Das müsste ca. So aussehen:
Delphi-Quellcode:
//Server:
Procedure TForm1.Timer1Timer(Sender: TObject);
var i:Integer;
begin
  with ServerSocket1 Do
  begin
    for i:=0 to Socket.ActiveConnections Do
    begin
      Socket.SendText('PING');
    end;
  end;
end;

//Client:
procedure TForm1.ClientSocket1Read(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  with ClientSocket1 do
  begin
    if Socket.Receivetext = 'PING' then
    begin
      Socket.SendText('PONG');
    end else
    begin
      Jobliste.Lines.Add(Socket.ReceiveText);
    end;
  end;
end;
Der Rest dürfte nicht mehr schwer sein


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:31 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