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 : 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
 
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 ^^