![]() |
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? |
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 |
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
|
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 |
Re: Sockets noch verbunden? Eine art ping....
Zitat:
Zitat:
Also müste ich warten bis der job kommt und dann ein pong schicken. Das kann aber vielleicht, je nach jobs, dauern. |
Re: Sockets noch verbunden? Eine art ping....
Zitat:
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:
|
Re: Sockets noch verbunden? Eine art ping....
Zitat:
Mfg |
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; |
Re: Sockets noch verbunden? Eine art ping....
oder gibt es eine bessere möglichkeit ein ping - pong umzusetzen....
|
Re: Sockets noch verbunden? Eine art ping....
Das müsste ca. So aussehen:
Delphi-Quellcode:
Der Rest dürfte nicht mehr schwer sein
//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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:26 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