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 :

Probleme envoi multicast sur XP


Sujet :

Windows

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 8
    Par défaut [Resolu] Probleme envoi multicast sur XP
    Bonjour,

    j'avais écrit un soft basé sur les exemples microsoft pour envoyer des paquets multicast. Cela fonctionnait parfaitement sur NT4, mais depuis que je l'essaie sur XP, à chaque emission de message, il me retourne un code "10022" qui veut dire en gros "mauvais paramètre"...

    Je suis donc un peu sec sur l'histoire, si quelqu'un peut me venir en aide ... Est ce qu'il n'y a pas un blocage fait par xp sur l'emission multicast ?

    Ma conf : visual c++ 6.0, xp pro sp 1, firewall macaffee (désactivé sur l'interface ou je l'utilise), pas de firewall windows.


    merci d'avance !

  2. #2
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    Pour être sûr, arrête le service pare-feu (qui tourne quand même), et donne le bout de code qui échoue.

  3. #3
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 8
    Par défaut
    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
    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
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    #include <stdio.h>
    #include <string.h>
    
    #include <winsock.h>
    #include <io.h>
    
    #define TBUF_LEN 1024
    
    void main&#40;int argc, char **argv&#41;
    &#123;
    	int portno = 4711;
    	struct sockaddr_in send_addr;
    	struct sockaddr_in local;
    	unsigned long inaddr = 0;	
       SOCKET sockfd;
       WSADATA wsaData;
    	char tbuf&#91;TBUF_LEN&#93;;
       int ttl = 1;
       int flag = 1;
       int tcount = 0  ;
    
    
       WSAStartup&#40;0x0202, &wsaData&#41;;
    
       if &#40;LOBYTE&#40;wsaData.wVersion&#41; != 2 ||
            HIBYTE&#40;wsaData.wVersion&#41; != 2 &#41; &#123;
    		/* Couldn't find an acceptable WinSock DLL       */
    		WSACleanup&#40;&#41;;
    
    		fprintf&#40;stderr, "%s&#58; failed to find Winsock version 2.2 or better\n", 
    				argv&#91;0&#93;&#41;;
    
    		exit&#40;1&#41;;
    	&#125;
    
    	if &#40;&#40;sockfd = socket&#40;AF_INET, SOCK_DGRAM, 0&#41;&#41; < 0&#41; &#123;
    	  fprintf&#40;stderr, "%s&#58; can't open stream socket\n", argv&#91;0&#93;&#41;;
    	  exit&#40;1&#41;;
    	&#125;
    	 
    	memset&#40;&#40;char *&#41; &local, 0, sizeof&#40;local&#41;&#41;;
    	local.sin_family      = AF_INET;
    	local.sin_addr.s_addr = htonl&#40;INADDR_ANY&#41;;  // Any address
    	local.sin_port        = htons&#40;0&#41;;			// Any port
    
        if &#40;bind&#40;sockfd, &#40;struct sockaddr *&#41; &local, sizeof&#40;local&#41;&#41; < 0&#41; &#123;
    	  fprintf&#40;stderr, "%s&#58; failed to bind locally\n", argv&#91;0&#93;&#41;;
    	  exit&#40;1&#41;;
    	&#125;	
    
    	/* TTL Scope Control Value */
        if &#40;setsockopt&#40;sockfd, IPPROTO_IP, IP_MULTICAST_TTL, &#40;const char *&#41; &ttl, sizeof&#40;ttl&#41;&#41; < 0&#41; &#123;
    	  fprintf&#40;stderr, "%s&#58; failed to set TTL to %d\n", argv&#91;0&#93;, ttl&#41;;
    	  exit&#40;1&#41;;
    	&#125;
    
        if &#40;setsockopt&#40;sockfd, IPPROTO_IP, IP_MULTICAST_LOOP, &#40;const char *&#41; &flag, 1&#41; < 0&#41; &#123;
    	  fprintf&#40;stderr, "%s&#58; failed to turn multicast loop according to %d\n", argv&#91;0&#93;, flag&#41;;
    	  exit&#40;1&#41;;
    	&#125;
    
    	/*
    	 * Setup send address
    	 */
    	memset&#40;&#40;char *&#41; &send_addr, 0, sizeof&#40;send_addr&#41;&#41;;
    	send_addr.sin_family      = AF_INET;
    	send_addr.sin_port        = htons&#40;&#40;u_short&#41; portno&#41;;
       inaddr = inet_addr&#40;"224.16.32.48"&#41;;   
       memcpy&#40;&#40;char *&#41; &send_addr.sin_addr, &#40;char *&#41; &inaddr, sizeof&#40;inaddr&#41;&#41;;
       
       
    	for &#40;;;&#41; &#123;
    		/* 
    		 * Setup a message
    		 */
    		sprintf&#40;tbuf, "Hello %d", tcount&#41;;
    		/* 
    		 * Send a message &#40;including the terminating '\0'&#41;
    		 */
    		if &#40;sendto&#40;sockfd, tbuf, strlen&#40;tbuf&#41;+1, 0, &#40;const struct sockaddr *&#41; &send_addr, sizeof&#40;send_addr&#41;&#41; < 0&#41; &#123;
    			fprintf&#40;stderr, "%s&#58; failed to send the message\n error %d", argv&#91;0&#93;, WSAGetLastError&#40;&#41;&#41;;
    		    break;
    		&#125;
          Sleep&#40;1000&#41;;
          tcount++;
    	&#125; /* End of infinitie sending loop */
    
    	WSACleanup&#40;&#41;;
    &#125;
    les sorties :
    mcastsender: failed to send the message
    error 10022

    Avec le parefeu stoppé, ca fait la même chose...

    J'ai retesté sous NT4, pas de pb....

  4. #4
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    224.16.32.48, c'est ton ip ?
    Le broadcast ne fonctionne qu'en réseau local il me semble (192.168.x.x). Je crois que XP SP2 fait ce genre de vérifs.

  5. #5
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 8
    Par défaut
    224.16.32.48 est l' adresse multicast du serveur avec qui je veux communiquer, conforme aux rfc ( comprise entre 224.0.0.0 et 240.255.255.255). Elle a donc une gestion particulière par la stack (pas de requete arp pour connaitre la mac, la mac contient l'adresse ip + deux octets d'header).

    Je n'ai réussi à trouver aucune doc sur ce genre de restriction sur le SP1 ou le SP2. En plus le message est très peu explicite...

    Ce que j'ai trouvé dans la base de registre c'est IGMPLevel (0 pas d'envoi ni de reception , 1 pas de reception, 2, : tout accepté), qui est par défaut à 2...
    je l'ai forcé à 2 (c'est un param optionnel), mais rien n'a changé!

    Si tu as d'autres idées pour permettre à XP d'envoyer des paquets....

  6. #6
    Expert confirmé

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 756
    Billets dans le blog
    3
    Par défaut
    J'ai confondu avec broadcast
    Apparement il peut y avoir un souci si tu as plusieurs cartes reseau installées:
    http://support.microsoft.com/default.aspx?scid=kb;en-us;827536
    quelques autres pistes:
    http://www.ureader.com/message/1365532.aspx
    http://www.codeproject.com/csharp/multicast.asp?df=100&forumid=3090&exp=0&select=926017
    http://wiki.python.org/moin/UdpCommunication#head-d3ffaf80063933bb5f4343e8eb3df98d707e3acc

  7. #7
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 8
    Par défaut
    je viens d'essayer le soft sur un pc avec XP embedded, le problème a disparu. Je l'ai donc essayé sur un XP pro que je viens de réinstaller, ca marche aussi. Le principal est donc fait...

    Pour savoir ce qui se passait sur mon pc de dev, j'ai désinstallé le firewall, et depuis ca marche. Je ne sais pas vraiment ou était la différence entre arréter le service et le désinstaller, mais à priori , c'était lui qui posait le problème. Ma cible finale ne l'utilisant pas, je vais pas trop pousser les investigations plus avant...


    Par contre, je n'ai pas rencontré le problème concernant plusieurs cartes réseau... (c'est déjà ca) mais à priori je le rencontrerai peut etre en SP2, ca me fera gagner du temps


    Merci de ton aide !

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

Discussions similaires

  1. probleme envoi email sur windows 2003 serveur
    Par longuard dans le forum Débuter
    Réponses: 1
    Dernier message: 15/12/2009, 20h51
  2. Probleme de pointeur sur une fonction
    Par nicky78 dans le forum C
    Réponses: 2
    Dernier message: 23/05/2004, 20h26
  3. Howto - Envoi message sur réseau
    Par Thomad dans le forum Windows
    Réponses: 2
    Dernier message: 31/03/2004, 16h46
  4. [C#] problème si clic sur "précédent"
    Par moimoimoi dans le forum ASP.NET
    Réponses: 13
    Dernier message: 11/03/2004, 15h30
  5. probleme d'installation sur d'autres postes
    Par VBkiller dans le forum Composants VCL
    Réponses: 4
    Dernier message: 18/09/2002, 18h14

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