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

Windows Discussion :

[winsock]émission d'un paquet Broadcast


Sujet :

Windows

  1. #1
    Membre actif Avatar de ronan99999
    Inscrit en
    Juillet 2003
    Messages
    279
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juillet 2003
    Messages : 279
    Points : 299
    Points
    299
    Par défaut [winsock]émission d'un paquet Broadcast
    Bonjour,
    je travaille en ce moment sur l'émission d'un paquet en broad cast avec l'api winsock. L'émission semble se passer correctement mais je ne reçois rien.

    Pour la partie émission en broad cast j'initialise ma socket comme ceci
    (udp, avec le flag broad cast)

    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
    
     //les tests des retours des différentes fonctions
     //ont été enlevé pour rendre le code plus lisible
    
    SOCKET initBroadCast(void)
    {
    	SOCKET hSocket;
    	int bBroadCast = 1;
    	SOCKADDR_IN	sUdp;
    	SOCKADDR_IN	srv_addr;
    	unsigned	ulLocalPort = 10000;
    	unsigned	ulRemotePort = 10001;
    	struct in_addr	sLocalAdress;
    
    	hSocket = socket (AF_INET, SOCK_DGRAM, IPPROTO_UDP) ;
    	setsockopt (hSocket, SOL_SOCKET, SO_BROADCAST,(char *) &bBroadCast, sizeof (bBroadCast));
    	memset (&sUdp, 0, sizeof(sUdp)); 
    	sUdp.sin_family	= AF_INET ;
    
    	sUdp.sin_addr.s_addr	= htonl(INADDR_ANY);
    	sUdp.sin_port = htons ((unsigned short)ulLocalPort) ;
    	bind (*phSocket, (SOCKADDR *) &sUdp, sizeof (SOCKADDR_IN)) ;
    
    	memset(&srv_addr, 0, sizeof(srv_addr)); 
    	srv_addr.sin_family = AF_INET;
    
    	sLocalAddr.S_un.S_addr = inet_addr("192.168.255.255");
    	memcpy(&srv_addr.sin_addr, &sLocalAddr, sizeof(sLocalAddr));
    	srv_addr.sin_port = (short)htons( (unsigned short) ulRemotePort);
    	connect (hSocket, (LPSOCKADDR)&srv_addr, sizeof(srv_addr);
    
    	return hSocket;
    }
    Pour la partie réception
    (udp non connecté)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     SOCKET initReception(void)
     {
     	SOCKADDR_IN	sUdp;
    	unsigned ulLocalPort = 10001;
    
    	hSocket = socket (AF_INET, SOCK_DGRAM, IPPROTO_UDP);
    	memset (&sUdp, 0, sizeof(sUdp)); 
    	sUdp.sin_family = AF_INET ;
    	sUdp.sin_addr.s_addr	= htonl(INADDR_ANY);
    	sUdp.sin_port = htons ((unsigned short)ulLocalPort) ;
    	bind (hSocket, (SOCKADDR *) &sUdp, sizeof (SOCKADDR_IN)) ;
    	return hSocket;
    }
    Si vous voyez des choses incohérentes au niveau des options.

    Merci.
    Si tu ne te plantes pas, comment veux tu pousser?

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Ben...
    Déjà, je vois un connect() pour un socket en UDP...

    Ne voulais-tu pas mettre SendTo() plutôt ?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre actif Avatar de ronan99999
    Inscrit en
    Juillet 2003
    Messages
    279
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juillet 2003
    Messages : 279
    Points : 299
    Points
    299
    Par défaut
    Merci de ta réponse.
    je pense que faire un connect puis un send reviens à la meme chose qu'un sendto.

    Je suis d'accord avec un toi un connect sur une socket udp c'est incohérent mais tout n'est pas de moi .

    Sinon j'ai réussi à le faire fonctionner (udp flag boadcast, connect puis send) .une chose me parait étrange,
    je suis sur un réseau lan les machines sont en dhcp avec des adresses de la forme 192.168.0.xxx, si j'envois un paquet avec une adresse broadcast 192.168.0.255, la réception se passe correctement maintenant si j'utilise 192.168.255.255
    les paquets ne sont pas reçu. je pensais que 192.168.255.255 incluait toutes les adresses du type 192.168.xxx.xxx et donc celles 192.168.0.xxx?
    Si tu ne te plantes pas, comment veux tu pousser?

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Le masque de sous-réseau est forcément 255.255.255.0 pour une adresse commençant par 192.168...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre actif Avatar de ronan99999
    Inscrit en
    Juillet 2003
    Messages
    279
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Juillet 2003
    Messages : 279
    Points : 299
    Points
    299
    Par défaut
    Oui je suis d'accord ou est le probléme.
    (en dhcp sous windows masque est par défaut à 255.255.255.0)
    Si tu ne te plantes pas, comment veux tu pousser?

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

Discussions similaires

  1. [UDP][Socket] perte de paquets et arret d'ecoute sur port
    Par Guismo1979 dans le forum Développement
    Réponses: 6
    Dernier message: 02/01/2003, 12h13
  2. [VB6] [Winsock] Trouver un port libre
    Par Yann dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 14/10/2002, 11h23
  3. Simulation de transmission de paquet entre différent réseaux
    Par MelloW dans le forum Développement
    Réponses: 2
    Dernier message: 12/07/2002, 19h51
  4. Redimensionnement des Paquets IP sur un Réseau Local
    Par Bonoboo dans le forum Développement
    Réponses: 2
    Dernier message: 12/07/2002, 15h40
  5. [Kylix] equivalent winsock avec kylix
    Par Victor dans le forum EDI
    Réponses: 2
    Dernier message: 08/05/2002, 07h43

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