application client-serveur multithread
Bonjour,
Il y a une chose que je ne comprends pas, je me tourne vers ce forum pour obtenir quelques explications.
Je tente de faire fonctionner une application client/serveur de cette fa�on :
une boucle accept c�t� serveur. Quand une connexion est entrante : un thread est lanc� afin de g�rer les communications entre serveur/client. (il n'y a que des caract�res � �changer, c'est quasi un chat)
Dans ce thread, ben j'aimerais pouvoir lancer une b�te boucle qui �crive les messages re�us du serveur en m�me temps qu'il lise ce que le client �crit potentiellement (bidirectionnel, quoi).
Mais voil� mon souci :
La boucle fait en gros un
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
|
int num;
while(1)
fgets(buff,MAXSIZE-1,stdin);
if ((send(sockfd, buff, strlen(buff),0))== -1) {
fprintf(stderr, "Erreur send\n");
close(sockfd);
exit(1);
}
else {
printf("Message envoyé : %s\n", buff);
num = recv(sockfd, buff, sizeof(buff),0);
if ( num <= 0 ){
printf("Connexion fermée\n");
break;
}
buff[num] = '\0';
printf("Message reçu du serveur - %s\n", buff);
} |
qui... ben qui est une structure qui a l'air assez typique pour r�aliser cet �change d'apr�s mes recherches sur le net.
Mais probl�me : lorsque la connexion est cr��e, le serveur envoie un message, qui n'est affich� qu'une fois que le client a envoy� une phrase.
Comment puis-je faire pour que ce message soit envoy� sans attendre cette action, et comment faire de fa�on g�n�rale pour effectuer... ben les deux actions simultan�ment ? Je pense qu'il y a une chose que je n'ai pas comprise... (au moins ^^)
(pour ma d�fense, j'avais d�j� r�alis� une appli client/serveur, mais celle-ci fonctionnait avec un select. Je sais, ce serait plus simple, mais voil�, je ne peux pas changer de m�thode, je dois faire tourner cette appli avec des threads)
Si quelqu'un avait la patience de m'expliquer... Merci d'avance :)
edit : En fait, j'ai pens� apr�s coup... Que je me compliquait la vie pour rien, �tant donn� que le c�t� "multithread", c'est seulement pour le serveur. Le clientpeut tout � fait �tre sur un select ou un poll... Mon probl�me est donc r�gl�.
Merci quand m�me ^^