Я не искушён в сетевом програмировании, поэтому простите если вопрос покажется лаймерским.
Проблема в следующем надо отправить udp сообщение всем компам данной сети. Подскажите функцию или лучше кусок кода для примера.
Вот что у меня сделано:
//------------------------------------------------------
bzero((char *) &serv_addr, sizeof(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_addr.s_addr = inet_addr("192.168.1.1");
serv_addr.sin_port = htons(SERV_UDP_PORT);
strncpy(mesg, "123456789", 8);
while(1)
{
sendto(ss, mesg, 9, 0, (struct sockaddr *)&serv_addr, sizeof(serv_addr));
cout << "client: send mesage for server #\t" << mesg << endl;
sleep(5);
}
//------------------------------------------------------
Если сервер работает на 192.168.1.1 то всё хорошо (сообщения он получает), но этого заранее не известно, да и серверов может быть несколько. Поробывал слать на 192.168.1.255 - сервак не чего не получает.
>этого заранее не известно, да и серверов может быть несколько. Поробывал
>слать на 192.168.1.255 - сервак не чего не получает.Надо чтобы сервера слушали на широковещательном адресе, т.е. надо чтобы bind(2) на сервере был сделан на .255 (в данном случае) адрес.
Помоему так:int on = 1;
> bzero((char *) &serv_addr, sizeof(serv_addr));
> serv_addr.sin_family = AF_INET;
> //serv_addr.sin_addr.s_addr = inet_addr("192.168.1.255");serv_addr.sin_addr.s_addr = INADDR_ANY;
> serv_addr.sin_port = htons(SERV_UDP_PORT);
> strncpy(mesg, "123456789", 8);setsockopt( ss, SOL_SOCKET, SO_BROADCAST, &on, sizeof(on) );
> while(1)
> {
> sendto(ss, mesg, 9, 0, (struct sockaddr *) &serv_addr,izeof(serv_addr));
> cout << "client: send mesage for server #\t" << mesg
><< endl;
> sleep(5);
> }И на сервере слушать адрес INADDR_ANY (т.е. любой)