Многоадресная рассылка не работает в Windows Vista - PullRequest
2 голосов
/ 14 декабря 2010

Хотя я пытаюсь выполнить многоадресную передачу чего-либо в диапазоне IP в Win XP, он работает нормально, но пока я запускаю то же самое приложение на Win VIsta, я не могу многоадресно передать.Нужно ли настраивать или добавлять информацию об издателе для Win Vitsa?

Редактировать:

struct sockaddr_in staddr;
    memset(&staddr, 0, sizeof(struct sockaddr_in));
    staddr.sin_family = AF_INET;
    staddr.sin_port = htons(SSDP_PORT); // Use the first free port
    staddr.sin_addr.s_addr=inet_addr(SSDP_MULTICAST_ADDRESS);

    int socklen = sizeof(struct sockaddr_in);

Редактировать 2

Socket Creation
int ibindstatus =0 ;
    try
    {
    //Initailize the WinSock
    WSADATA wsaData;
    WSAStartup(MAKEWORD(2,2), &wsaData);

   struct in_addr iaddr;
   struct sockaddr_in staddr;
   // set content of struct saddr and imreq to zero
   memset(&staddr, 0, sizeof(struct sockaddr_in));
   memset(&iaddr, 0, sizeof(struct in_addr));

   // open a UDP socket

   m_iSocket = socket(AF_INET, SOCK_DGRAM, 0);
   if ( m_iSocket < 0 )     
    {       
      return SOCKET_NOT_AVAILABLE;
    } 

   staddr.sin_family = AF_INET;
   staddr.sin_port = htons(SSDP_PORT); // Use the first free port
   staddr.sin_addr.s_addr = htonl(INADDR_ANY); // bind socket to any interface 

   ibindstatus = bind(m_iSocket, (struct sockaddr *)&staddr, sizeof(struct sockaddr_in));
   if ( ibindstatus < 0 )
   {
      return SOCKET_BIND_ERROR;
   }


    //send the buffer
    int iSendStatus = sendto(m_iSocket, cSendData, lSendDataLen, 0,
                     (struct sockaddr *)&staddr, socklen);  
    if(iSendStatus< 0)
    {
       return SEND_ERROR;      
    }

1 Ответ

0 голосов
/ 20 декабря 2010

Через много экспериментов я не смог выяснить, почему не работало многоадресное вещание, и внезапно обнаружил, что это связано с тем, что Обнаружение сети было отключено в моей Vista.

Если здесь, что я сделал, перейдите на Панель управления -> Настройка общего доступа к файлам (Под Сеть и Интернет ) -> Совместное использование и обнаружение а затем включите или выключите обнаружение сети

Хорошо, вот что работает для моего приложения, и исходный код - это то, что я опубликовал в своем вопросе.Надеюсь, что это сэкономит ваше время и нервы.

...