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
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 !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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;
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.
Partager