The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Отшравка широковещательных сообщений, !*! 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, 09:07 , 15-Июл-02 (1)
    >этого заранее не известно, да и серверов может быть несколько. Поробывал
    >слать на 192.168.1.255 - сервак не чего не получает.

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

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

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




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру