URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 842
[ Назад ]

Исходное сообщение
"Отшравка широковещательных сообщений"

Отправлено Aleks , 13-Июл-02 15:16 
Я не искушён в сетевом програмировании, поэтому простите если вопрос покажется лаймерским.
Проблема в следующем надо отправить 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 - сервак не чего не получает.

Содержание

Сообщения в этом обсуждении
"RE: Отшравка широковещательных сообщений"
Отправлено Andrey , 15-Июл-02 09:07 
>этого заранее не известно, да и серверов может быть несколько. Поробывал
>слать на 192.168.1.255 - сервак не чего не получает.

Надо чтобы сервера слушали на широковещательном адресе, т.е. надо чтобы bind(2) на сервере был сделан на .255 (в данном случае) адрес.


"RE: Отшравка широковещательных сообщений"
Отправлено SIGurd , 17-Июл-02 14:31 
Помоему так:

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 (т.е. любой)