IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Réseau C Discussion :

pb fonction select


Sujet :

Réseau C

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 77
    Points : 34
    Points
    34
    Par défaut pb fonction select
    Tout dabord bonjour,

    Je viens à vous car j'ai un code qui me permet de chatter avec une ou plusieurs personnes via les ports de mon réseau. Mais quand j'ai plus de 1 utilisateur, mon programme attend que le premier connecté finisse de rentrer son message pour voir les autres.
    J'ai donc effectué des rechercher, et j'ai trouvé la fonction select ! mais quand j'essaie de l'ajouter à mon programme, c'est la que sa coinse.

    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     
    struct sockaddr_in addr;
    	addr.sin_family=AF_INET;
    	int socke=addr.sin_port=htons(2572);
     
    struct in_addr addr_en;
    	addr_en.s_addr=INADDR_ANY;
     
    	addr.sin_addr=(addr_en);
     
    **********************************************
     
    while(nn<3)
    {
    printf("On rentre dans la boucle...\n");
    sock=accept(DesSocket,&addr,&addrlen2);
    	if (sock<0)
    		{
    			printf("erreur accept\n");
    			exit(0);
    		}
    	printf("accept reussi houra\n");
     
    nn=nn+1;
    	printf("avant select\n");
    fd_set rfds;
     
     
    FD_ZERO(&rfds);
    FD_SET (sock_a, &rfds);
     
    int retval= select (FD_SETSIZE,&rfds,NULL,NULL,NULL);
    	printf("après select\n");
     
    switch (retval)
    	{
    		case 0:
    		printf("erreur select\n");
    		exit(0);
    		case -1:
    		printf("erreur select\n");
    		exit(0);
     
    		default:
    			if(FD_ISSET(socke,&rfds))
    			{
    				nb=recv(sock,buffer,sizeof(buffer),0);
    					if(nb<0)
    						{
    						printf("reception impossible\n");
    						exit(0);
    						}
     
    				printf("message recu du client : %s \n",buffer);
    			}
    	}
    (ps: les étoiles sont une partie du programme que je n'ai pas mis
    mon programme s'arrette tout le temps dans la fonction select.

    merci de m'aider car là je suis totalement perdu

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 77
    Points : 34
    Points
    34
    Par défaut
    bon bah j'ai réussi à avancer mais je suis bloqué au niveau de mon select maintenant.
    Quelqu'un pourrais m'aider !


    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
     
    DesSocket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
    	if(DesSocket<0)
    		{
    			printf("erreur creation socket\n");
    			exit(0);
    		}
     
    	printf("numero du port : ");
    	scanf("%d",&nbport);
     
    struct sockaddr_in addr;
    	addr.sin_family=AF_INET;
    	addr.sin_port=ntohs(nbport);
     
    struct in_addr addr_en;
    	addr_en.s_addr=htonl(INADDR_ANY);
     
    	addr.sin_addr=(addr_en);
     
     
    FD_ZERO(&rfds);
    int Maxsock=0;
    int i;
    for (i=0;i<nb;i++)
    	{
    	if(t[i]!=0)
    		FD_SET(t[i],&rfds);
    	if(Maxsock<t[i])
    		Maxsock=t[i];
    	}
    printf("for passer\n");
    	int retval= select(Maxsock+1,&rfds,NULL,NULL,NULL);
    		if (retval<0)
    			{
    			printf("erreur select\n");
    			}
    printf("select passe\n");
     
    			if(FD_ISSET(DesSocket,&rfds))
    			{
    				DesSocket1=accept(DesSocket,&addr,&addrlen2);
    					if(DesSocket1<0)
    					{ printf("erreur accept\n");
    					  exit(0);
    					}
    				nd++;
    				t[nd-1]=DesSocket1;
    			}
    			int k;
    			for (k=1;k<nd;k++)
    			{
    				if(FD_ISSET(t[k],&rfds))
    				{
    				nb=recv(t[k],&buffer,sizeof(buffer),0);
    					if(nb<0)
    						{
    						printf("reception impossible\n");
    						exit(0);
    						}
     
    				printf("message recu du client : %s \n",buffer);
    				}
     
    			}

Discussions similaires

  1. contraire de la fonction select()
    Par danyboy85 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 26/04/2006, 16h39
  2. [fonction] select
    Par heid dans le forum Oracle
    Réponses: 11
    Dernier message: 01/03/2006, 14h26
  3. Infos sur la fonction select en C
    Par oook dans le forum C
    Réponses: 8
    Dernier message: 07/12/2005, 15h15
  4. la fonction select
    Par flo456 dans le forum ASP
    Réponses: 3
    Dernier message: 21/11/2005, 11h27
  5. la fonction select()
    Par youp_db dans le forum Windows
    Réponses: 1
    Dernier message: 02/09/2005, 16h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo