Diffusion UDP dans Windows 7 - faut-il travailler?

Je suis en train d'écrire un peu de code sous Windows 7 pour diffusion dans l'ensemble de mon réseau local et ne peut pas obtenir le code suivant à travailler. Je viens d'un Linux arrière-plan alors, toutes mes excuses pour le style et le code compile etc et des travaux, et si j'utilise une adresse de:

unsigned long broadcastAddr = inet_addr("192.168.10.0") | ~(inet_addr("255.255.240.0"));

Puis qui fonctionne très bien, seulement je voudrais vraiment utiliser le préféré INADDR_BROADCAST/255.255.255.255 méthode.

<snip>
SOCKET sockfd;
int broadcast = 1;

WSADATA wsaData;    //Windows socket

//Initialize Winsock
if (WSAStartup(MAKEWORD(2,2), &wsaData) == SOCKET_ERROR) {
    perror("WinSock Error");
    getc(stdin);
    exit(EXIT_FAILURE);
}
if ((sockfd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == -1) {
    perror("Socket Error");
    getc(stdin);
        exit(1);
}

if ((setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST, (char *)&broadcast, sizeof(broadcast))) == SOCKET_ERROR) {
    perror("Setsockopt - SOL_SOCKET");
    getc(stdin);
    exit(1);
}

struct sockaddr_in recvaddr;
recvaddr.sin_family = AF_INET;
recvaddr.sin_port = htons(PORT);
recvaddr.sin_addr.s_addr = htonl(INADDR_BROADCAST);
memset(recvaddr.sin_zero,'
<snip>
SOCKET sockfd;
int broadcast = 1;
WSADATA wsaData;    //Windows socket
//Initialize Winsock
if (WSAStartup(MAKEWORD(2,2), &wsaData) == SOCKET_ERROR) {
perror("WinSock Error");
getc(stdin);
exit(EXIT_FAILURE);
}
if ((sockfd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == -1) {
perror("Socket Error");
getc(stdin);
exit(1);
}
if ((setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST, (char *)&broadcast, sizeof(broadcast))) == SOCKET_ERROR) {
perror("Setsockopt - SOL_SOCKET");
getc(stdin);
exit(1);
}
struct sockaddr_in recvaddr;
recvaddr.sin_family = AF_INET;
recvaddr.sin_port = htons(PORT);
recvaddr.sin_addr.s_addr = htonl(INADDR_BROADCAST);
memset(recvaddr.sin_zero,'\0', sizeof(recvaddr.sin_zero));
int numbytes = 0;
while ((numbytes = sendto(sockfd, greet, strlen(greet) , MSG_DONTROUTE, (struct sockaddr *)&recvaddr, sizeof(struct sockaddr_in))) != -1) {
printf("Sent a packet %d\n", numbytes);
Sleep(100);
}
'
, sizeof(recvaddr.sin_zero)); int numbytes = 0; while ((numbytes = sendto(sockfd, greet, strlen(greet) , MSG_DONTROUTE, (struct sockaddr *)&recvaddr, sizeof(struct sockaddr_in))) != -1) { printf("Sent a packet %d\n", numbytes); Sleep(100); }
Cela fonctionne si vous avez, tout simplement, diffusé à 255.255.255.255?
Pas de. J'ai essayé un certain nombre de permutations, mais je ne peux sembler à envoyer sur l'adresse de diffusion dirigée vers l'endroit où vous OU l'IP avec l'inverse du masque de sous-réseau.
Ce qui se passe lorsque vous envoyez des INADDR_BROADCAST ?

OriginalL'auteur 17Twenty | 2011-01-06