Bonjour � tous
Je cherche un exemple pour utiliser un composant ClientSocket en mode bloquant avec un thread "TClientSocketThread".
Je ne comprend pas a fa�on de cr�er le thread et la mani�re d'utiliser les bon arguments![]()
Merci d'avance
Mastok
Bonjour � tous
Je cherche un exemple pour utiliser un composant ClientSocket en mode bloquant avec un thread "TClientSocketThread".
Je ne comprend pas a fa�on de cr�er le thread et la mani�re d'utiliser les bon arguments![]()
Merci d'avance
Mastok
Salut,
le but des composants TClientSocket et TServerSocket, est que justement, tu n'as pas � g�rer les threads, il le fait lui m�me.
Je te conseille ces trois discutions sur les composants socket :
Bonjour
L'utilisation de la classe TServerSocket en mode synchrone(bloquant) n�cessite
une classe descendante de TServerClientThread
par ex:
tu impl�mente ton code dans le fichier .cpp de m�me nom
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 class TMyServerThread : public TServerClientThread { public: // if true, FreeOnTerminate is set to false before the thread terminates, // and the thread is left in the thread cache. When KeepInCache is false, // the thread is freed when execution terminates. __fastcall TMyServerThread(bool CreateSuspended, TServerClientWinSocket* ASocket) : Scktcomp::TServerClientThread(CreateSuspended, ASocket) { CreateSuspended = false; FreeOnTerminate=false; }; void __fastcall ClientExecute(void); private: // tes membres privés };
tu cr�e une instance de ta classe de traitement dans la m�thode OnGet Thread
ton composant TServerSocket cr�era ainsi pour chaque socket client une instance de ta classe TMyServerThread .
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7 void __fastcall TForm1::ServerSocket1GetThread(TObject *Sender, TServerClientWinSocket *ClientSocket, TServerClientThread *&SocketThread) { SocketThread = new TMyServerThread(false, ClientSocket); }
Un point important le composant TServerSocket g�re une cache des threads
il peut �tre n�cessaire de contr�ler par exemple dans le constructeur de ta classe si le nombre de threads cr�es est plus petit que la taille du cache (par d�faut 10) de garder le thread en m�moire
cordialement
vous trouverez mes tutoriels � l'adresse suivante: http://djmsoftware.developpez.com/
je vous en souhaite une excellente lecture ...
A lire : Les r�gles du forum
Ok pour le serveur mais pour le Client j'aurais voulu cr�er un thread bloquant �galement.
tu Cr�e une classe descendant de TThread en passant dans le constructeur de cette classe le Port de connexion et un MemoryStream initialis� avec les donn�es que tu veux transmettre au serveur
dans la m�thode Execute de ta class Thread tu cr�e une instance de la classe TClientThread, tu initialise cette classe avec l'adresse du serveur, le mode de travail bloquant ,tu active l'instance de TclientThread, tu cr�e une boucle d'attente de type
dans l'aide de c++ Builder tu trouveras l'exemple suivant
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10 while (!Terminated && FSocket->Connected) { if(FStream->WaitForData(60000)) { //ton code de traitement } } // tu déconnecte le socket
cordialement
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
32 void __fastcall TMyClientThread::Execute() { // crée un TWinSocketStream pour la lecture et l'écriture TWinSocketStream *pStream = new TWinSocketStream(ClientSocket1->Socket, 60000); try { // récupère et traite les commandes jusqu'à ce que la connexion ou le thread soit terminé while (!Terminated && ClientSocket1->Active) { try { char buffer[10]; GetNextRequest(buffer); // GetNextRequest doit être une méthode protégeant le thread // écrit la demande au serveur pStream->Write(buffer, strlen(buffer) + 1); // continue la communication (par exemple, lit une réponse du serveur) ... } catch (Exception &E) { if (!E.ClassNameIs("EAbort")) Synchronize(HandleThreadException()); // vous devez écrire HandleThreadException } } } __finally { delete pStream; } }
vous trouverez mes tutoriels � l'adresse suivante: http://djmsoftware.developpez.com/
je vous en souhaite une excellente lecture ...
A lire : Les r�gles du forum
Partager