Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 02/12/2015, à 12:39

Rabdou

problème select () soket

bonjour
je suis entrain d'écrire un programme utilisant des socket en c serveur 3 client, j'ai voulu utilisé la fonction select()
pour testé quel client envois un msg et récupéré le descripteur de se client puis le classé dans une file d'attente ;
puis traitement des msg selon l'ordre du client dans la file d'attente.

merci

Dernière modification par Rabdou (Le 02/12/2015, à 19:20)

Hors ligne

#2 Le 02/12/2015, à 18:50

Rabdou

Re : problème select () soket

salut j'ajoute le code que j'ai écrie  pour mieux m'aidé

// après conextion de 3 socket client au serveur respectivement  : conect1, conect2, conect3, lft[] file d'attente.
// clear buffer soket
FD_ZERO(&readfds);
// ajouter nos descrepteur
FD_SET(conect1, &readfds);
FD_SET(conect2, &readfds);
FD_SET(conect3, &readfds);

for (n=1;n<4;n++)
{
memset(msg, 0, 255);
dt = select(conect3+1, &readfds, NULL, NULL, NULL);
if ((dt == -1) ||(dt == 0))
{
    perror("select");
}
else {
    // un client demande
    if (FD_ISSET(conect1, &readfds)) 
            {recv(conect1, &msg, strlen(msg), 0);    FD_CLR(conect1,&readfds);
	     if (n==1)      printf(" client: 1 %s lit les choix , les autre en attente\n",msg);
	            else {printf("'clien:1 attente \n");
	             ft[n-1]=1;}goto t ;  }
    if (FD_ISSET(conect2, &readfds)) 
                 {recv(conect2, &msg, strlen(msg), 0);     FD_CLR(conect2,&readfds);
	             if (n==1) printf(" client: 2 %s lit les choix , les autre en attente\n",msg);
	                  else {printf("clien:2 attente\n ");
	                           ft[n-1]=2;}goto t;}
    if (FD_ISSET(conect3, &readfds)) 
               {recv(conect3, &msg, strlen(msg), 0);FD_CLR(conect3,&readfds);
	            if (n==1) printf(" client:3 %slit les choix , les autre en attente\n",msg);
	                       else {   printf("client:3 attente\n");
	                              ft[n-1]=3;}goto t; }
    t:scanf("%c",&et); }
}

normalement , le 1er tour me donne la 1ere socket client qui envois un msg la met dans ft[] puis le 2eme tour pour la 2eme , et le 3eme tour mm chose mais sa marche pas

Dernière modification par Rabdou (Le 02/12/2015, à 19:30)

Hors ligne