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 :

recvfrom qui ne bloque pas ?


Sujet :

Réseau C

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 189
    Points : 60
    Points
    60
    Par défaut recvfrom qui ne bloque pas ?
    Bonjour,

    j'ai un petit souçi. J'essaie de réaliser le début d'un serveur udp multicast mais mon appel à recvfrom n'est pas bloquant et apparamment il renvoi -1. Je ne vois pas pourquoi. Si vous pouviez m'éclairer ce serait cool. Voici le code :

    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
    #include <winsock2.h>
    #include <stdio.h>
     
     
     
    int main()
    {
    	//ACTIVATION WINSOCK
    	WSADATA WSAData;
    	WSAStartup(MAKEWORD(2,0), &WSAData);
     
    	//DECLARATION DES VARIABLES
    	char usersName[10][20] ;
     
    	SOCKET sock;                                                                              
    	SOCKADDR_IN sin;
     
    	int sinsize = sizeof(sin) ;
     
    	sock = socket(AF_INET,SOCK_DGRAM,0) ;
    	sin.sin_addr.s_addr =inet_addr("224.0.0.3");
    	sin.sin_family=AF_INET;
    	sin.sin_port=htons(1234);
     
    	bind(sock, (SOCKADDR *)&sin, sizeof(sin));
     
    	//listen(sock, 0);
    	printf("*** serveur WIPAV lance ***\n") ;	
     
    	//SERVEUR EN ATTENTE DE CONNECTION
     
    	while(1)
    	{	
    			char buffer[50]="" ;
    			printf("En attente\n") ;
    			if(recvfrom(sock, buffer, sizeof(buffer), 0, (SOCKADDR *) &sin, &sinsize)==-1)
    			{	
    				perror("erreur") ;
    				exit(-1) ;
    			}	
    			printf("%s\n", buffer) ;
            }
    }

  2. #2
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par innosang
    j'ai un petit souçi. J'essaie de réaliser le début d'un serveur udp multicast mais mon appel à recvfrom n'est pas bloquant et apparamment il renvoi -1. Je ne vois pas pourquoi. Si vous pouviez m'éclairer ce serait cool. Voici le code :
    Horrible ! Il n'y a aucune raison de coder comme un porc...
    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
    66
    67
    68
    69
     
    #include <winsock2.h>
    #include <stdio.h>
     
    int main (void)
    {
       //ACTIVATION WINSOCK
       WSADATA WSAData;
       int err = WSAStartup (MAKEWORD (2, 0), &WSAData);
     
       if (err >= 0)
       {
          //DECLARATION DES VARIABLES
          SOCKET sock = socket (AF_INET, SOCK_DGRAM, 0);
     
          if (sock != INVALID_SOCKET)
          {
             SOCKADDR_IN sin = { 0 };
     
             printf ("SRV : socket = %d\n", (int) sock);
     
             sin.sin_family = AF_INET;
             sin.sin_addr.s_addr = htonl (INADDR_ANY);
             sin.sin_port = htons (1234);
     
             err = bind (sock, (SOCKADDR *) & sin, sizeof sin);
     
             if (err >= 0)
             {
                int end = 0;
                printf ("*** serveur WIPAV lance ***\n");
                //SERVEUR EN ATTENTE DE RECEPTION
                while (!end)
                {
                   SOCKADDR_IN csin;
                   int sinsize = sizeof (csin);
                   char buffer[50] = "";
                   int n;
                   printf ("En attente\n");
                   n = recvfrom (sock, buffer, sizeof buffer - 1, 0,
                                 (SOCKADDR *) & csin, &sinsize);
                   if (n >= 0)
                   {
                      buffer[n] = 0;
                      printf ("%s\n", buffer);
                   }
                   else
                   {
                      printf ("SRV : recvfrom() error %d\n", n);
                      end = 1;
                   }
                }
             }
             else
             {
                printf ("SRV : bind() error\n");
             }
     
             closesocket (sock);
             printf ("SRV : socket %d closed\n", sock);
          }
          WSACleanup ();
       }
       else
       {
          printf ("WSA : error %d\n", err);
       }
       return 0;
    }
    Pose des questions si tu ne comprends pas.

    http://emmanuel-delahaye.developpez.com/reseaux.htm
    Pas de Wi-Fi à la maison : CPL

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. CustomValidator qui ne bloque pas l'envoi de la page
    Par Titi41 dans le forum ASP.NET
    Réponses: 10
    Dernier message: 30/06/2008, 17h35
  2. Message attente qui ne bloque pas l'affichage en background
    Par gentyjp dans le forum Windows Forms
    Réponses: 1
    Dernier message: 17/05/2008, 00h25
  3. Temporisation qui ne bloque pas l'application
    Par Zorgloub dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 14/02/2008, 16h55
  4. alert() qui ne bloque pas le chargement de la page ?
    Par Cofondinde dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 16/08/2007, 10h31
  5. Réponses: 8
    Dernier message: 25/11/2005, 18h38

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