ServerSocket - et Thread un petit souci qui me fait tourner en bourique
Pornman
Messages postés20Date d'inscriptionsamedi 25 septembre 2004StatutMembreDernière intervention20 janvier 2006
-
20 janv. 2006 à 05:26
damahom
Messages postés12Date d'inscriptionlundi 25 février 2008StatutMembreDernière intervention25 mars 2011
-
25 mars 2011 à 19:46
Bjour tout le monde
Jai un petit soucis sous avec le TServerSocket (stThreadBlocking)
Lorsqun client etablie la connection tout va pour le mieu... les routines fonctionnent a merveille.
Lorsque le Client se deconnect ou "Crash" le thread reste ouvert.. (ce
que je veux dailleur pour pouvoir faire des routine de finalization
avant la fermeture de la thread).
Le probleme est que je nai AUCUN signal ou event qui me permet de dire si le client est encore connecter ou non.
Voila un petit bout de code:
TClientThread = Class(TServerClientThread)
Public
Clientinfo : TClientInfo;
Procedure ClientExecute; Override;
end;
var
ClientThread : TClientThread;
Procedure TClientThread.ClientExecute;
var
IP,Serial:string;
begin
if (ClientSocket.Connected) then
begin
Clientinfo.IP := ClientSocket.RemoteAddress;
// et encore des dizaines de lignes
end;
While (ClientSocket.Connected) do // Si le client est toujour connecter ...
begin
// et encore des dizaines de lignes
end;
// Ici on sort de la "boucle" donc SI (ClientSocket.Connected) = FALSE
damahom
Messages postés12Date d'inscriptionlundi 25 février 2008StatutMembreDernière intervention25 mars 2011 25 mars 2011 à 19:46
Je sais que cette thread fait 5 ans, mais bon, c'est pour n'importe qui d'autre qui pourrait la lire en cherchant:
Meme si je ne suis pas un expert, Je crois que tu devrais utiliser le onerror event car une déconnexion est parfois traite comme une erreur i.e erreur 10053.. etc. essaye quelque chose comme ca:
procedure TForm1.ClientSocket1Error(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin if ((errorcode 10053)or (errorcode 10061)) then
begin memo1.lines.add('Client deconnecte')
end; end;
Et encore une fois je ne suis pas expert, mais j'ai eu le meme probleme et ceci a ete la solution.