TIdTCPServer / active:=false / application bloquée ?
Bonjour,
J'ai fait différents tests des composants Indy 10 et me voilà bloqué sur le problème qui suit :
L'application est des plus basique (1 forme, 1 TIdTCPServer, 1 mémo, 1 bouton Start, 1 bouton Stop) Voir le code des méthodes ci-dessous
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
|
procedure TForm1.pxyButtonStartClick(Sender: TObject);
begin
pxyMemo.Lines.Add('Listening on port ' + IntToStr(pxyIdTCPServer.DefaultPort));
pxyIdTCPServer.Active := true;
end;
procedure TForm1.pxyButtonStopClick(Sender: TObject);
begin
pxyIdTCPServer.Active := false;
pxyMemo.Lines.Add('Stop listening on port ' + IntToStr(pxyIdTCPServer.DefaultPort));
end;
procedure TForm1.pxyIdTCPServerConnect(AContext: TIdContext);
begin
pxyMemo.Lines.Add('Connexion de "' + AContext.Connection.Socket.Binding.PeerIP + ':' + IntToStr(AContext.Connection.Socket.Binding.PeerPort) + '"');
end;
procedure TForm1.pxyIdTCPServerDisconnect(AContext: TIdContext);
begin
pxyMemo.Lines.Add('Déconnexion de "' + AContext.Connection.Socket.Binding.PeerIP + ':' + IntToStr(AContext.Connection.Socket.Binding.PeerPort) + '"');
end;
procedure TForm1.pxyIdTCPServerExecute(AContext: TIdContext);
var
Line : String;
StrWasSplit : Boolean;
begin
Line := AContext.Connection.IOHandler.ReadLnSplit(StrWasSplit, #13, 10000);
pxyMemo.Lines.Add('Received : ' + Line);
end; |
Mon problème est le suivant : si une connexion a été effectuée, lorsque je clique sur le bouton Stop, toute l'application se fige pendant l'exécution de la ligne "pxyIdTCPServer.Active := false;", et ceci indéfiniment. Par contre, si aucune connexion n'a eu lieu, la ligne s'exécute sans s'arrêter !
Une idée pour m'aider ???
Je dois avoir loupé une information sur l'utilisation de ce composant car toutes les recherches que j'ai faites à ce sujet expliquent que pour arrêter le TIdTCPServer, il suffit de passer sa propriété "Active" à false !!!
Merci d'avance.