Comment trouver son adresse IP locale ?
Salut,
J'ai une application client/serveur.
Mon client envoie un broadcast sur le réseau.
Apres plusieurs tests cela fonctionne parfaitement sous XP avec ces infos :
Code:
1 2 3 4 5 6 7 8
| InfosServeur.sin_family = AF_INET;
InfosServeur.sin_addr.s_addr = INADDR_BROADCAST; // Destination IP = BDCST
InfosServeur.sin_port = htons(PORT_SERVICE_SERVEUR); // Destination port = 1337
memset(Tampon,0,LONGUEURMSG); // On reinitialise le tampon
strcpy(Tampon,"DECOUVERTE"); // Copie la chaine de caractère dans buffer
LongueurMessage = sendto(idSocket, Tampon, strlen(Tampon), 0, (SOCKADDR *)&InfosServeur, TailleStructure); |
Seulement sous Win7 et bien cela ne fonctionne plus !
J'ai trouvé pourquoi, en effet sous seven il y a des restrictions sur le broadcast en effet on ne peut pas emettre sur 255.255.255.255.
Alors, en transformant cette ligne :
Code:
InfosServeur.sin_addr.s_addr = INADDR_BROADCAST; // Destination IP = BDCST
En ceci :
Code:
InfosServeur.sin_addr.s_addr = inet_addr("192.168.1.255"); // Destination IP = BDCST
Et bien ca fonctionne partout meme sous Seven.
Mon problème maintenant c'est de trouver quelle adresse IP transformer en broadcast avec le masque !
En effet le client peut avoir plusieurs interfaces, le INADDR_BROADCAST ne s'en souciait pas mais la je bloque pour savoir comment la trouver sans demander à l'utilisateur ????