Модераторы: powerfox, ZeeLax
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> UDP Broadcast, широковещательная рассылка 
:(
    Опции темы
GrayCardinal
Дата 22.10.2004, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фигасе
****


Профиль
Группа: Завсегдатай
Сообщений: 3039
Регистрация: 9.11.2003

Репутация: 6
Всего: 58



суть дела :
Цитата

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>

int main (int argc, char ** argv)
{
int Sock;
int optval; 
int optlen; 
struct sockaddr_in server,myaddr;
int rs;
unsigned long addr;
char buf[1024];

Sock = socket (PF_INET, SOCK_DGRAM, IPPROTO_UDP);

if (Sock <0)
  return -1;

optval=1;
optlen=sizeof(optval);

if(setsockopt(Sock, SOL_SOCKET, SO_BROADCAST, (const char*) &optval, sizeof(optval)) < 0)
{
  printf ("ERROR: set SO_BROADCAST\n");
  return -1;
}

bzero (&server, sizeof (server));
if ((argc == 2) && !strcmp (argv[1], "server"))
{
  myaddr.sin_port = htons (7);
  inet_aton ("169.254.174.145", &myaddr.sin_addr);
  myaddr.sin_family = AF_INET;
 
  if (bind (Sock, (sockaddr *) &myaddr, sizeof (myaddr)) < 0)
  {
  perror ("bind");
  return -1;
  }

  while (true)
  {
  rs = recvfrom (Sock, buf, 1024, 0, NULL, 0);
  perror ("");
  printf ("recv from return %d\n", rs);
  }
}

server.sin_port = htons(7);
server.sin_addr.s_addr = INADDR_BROADCAST;     
server.sin_family = AF_INET;

rs=sendto (Sock, "aa\r\n", 5, 0,(struct sockaddr *)&server, sizeof (server));

perror ("");
printf ("send to return %d\n",rs);

return EXIT_SUCCESS;
}

сервак не получает UDPшки.
Хотя если посылать на "169.254.255.255" мессага уходит нормально... но сервер ее все равно не получает :stena .
Помогите, плз...

Сетевую ставил :
ifconfig eth0 169.254.174.145 - все ОК (компы вижу вроде)...
пингуется нормально... :stena

ЗЫ:
Я себе 2.6.9 поставил, может там чего включить надо, а ?

Это сообщение отредактировал(а) GrayCardinal - 22.10.2004, 14:24


--------------------
PM MAIL WWW   Вверх
dargaard
Дата 22.10.2004, 22:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Экс. модератор
Сообщений: 450
Регистрация: 7.5.2004

Репутация: 12
Всего: 25



Попробовал у себя : работает в след случаях.

Пакет надо слать на 169.254.174.255 или на 169.254.174.0 (я не думаю что
у тебя сеть класса Б). Т.е. предпологается что нетмаска у тебя 255.255.255.0
а не 255.255.0.0.
Broadcast адресса явлаются первыми и последними в подсети. Следовательно если у тебя подсеть 169.254.174.х/24 то броадкаст адреса будут 169.254.174.0 и 169.254.174.255


немного изменил код (посадил на 5555 порт все енто дело)

Код

struct hostent *h;
h=(struct hostent*)gethostbyname("192.168.1.255");
server.sin_port = htons(5555);
memcpy(&server.sin_addr,h->h_addr,h->h_length);
server.sin_family = AF_INET;

rs=sendto (Sock, "aa\r\n", 5, 0,(struct sockaddr *)&server, sizeof (server));

perror ("");
printf ("send to return %d\n",rs);

return EXIT_SUCCESS;
}


Цитата

Success
recv from return 5
Success
send to return 5

Добавлено @ 22:16
з.ы. Если у тебя нетмаска другая соответственно и броадкаст адреса будут другими.
Если есть сеть х.х.х.х и маска подести то переводишь маску в двоичныи вид.
к слову маска 255.255.255.0 переведется в 11111111 11111111 11111111 00000000
Далее смотришь по маске. Все 0 в маске (в двоичном) говорят какие хосты могут быть в подсети. Т.е. в нашем случае хосты в подсети могут иметь ип от х.х.х.0 до х.х.х.255
Но если вместо хоста (последние 8 бит адресса в нашем случае) все единицы или все нули , то енто броадкаст адрес для подсети.

например если бы маска была
255.255.255.224 (11111111 11111111 11111111 1110000) (32 хоста в подсети) то
броадкаст адреса имели бы вид
х.х.х.0 , х.х.х.31 (для подсети х.х.х.0)
х.х.х.32, х.х.х.63 (для подсети х.х.х.32)
и т.д.




--------------------
Ты должна сделать добро из зла 
потому что его больше не из чего
сделать. Р.П.Уоррен
PM MAIL WWW ICQ   Вверх
GrayCardinal
Дата 23.10.2004, 09:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фигасе
****


Профиль
Группа: Завсегдатай
Сообщений: 3039
Регистрация: 9.11.2003

Репутация: 6
Всего: 58



:stena :stena :stena
адрес у меня 169.254.174.145, маска 255.255.0.0 (в винде посмотрел, сейчас у меня точно 169, энто когда один хаб был - было 192, а сейчас 169.254...)
даже на 224.0.0.0 не работает. посылать - посылает, а получить не получает. куды только я не слал. приведенный вариант тоже не пашет
пробовал даже "родной" 2.4.19-16mdk загрузить, нифига...

... может меня глючит ... ?
да, и если слать на
255.255.255.255 или 224.0.0.0
выдает :
"Network is unreachable"

"route" выдает
Цитата

169.254.0.0    *              255.255.0.0    U    0      0        0 eth0
127.0.0.0      *              255.0.0.0      U    0      0        0 lo


ifconfig
Цитата

eth0      Link encap:Ethernet  HWaddr 4C:00:10:39:9C:4F
          inet addr:169.254.174.145  Bcast:169.254.255.255  Mask:255.255.0.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:89 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 b)  TX bytes:10897 (10.6 Kb)
          Interrupt:11 Base address:0x2000


Это сообщение отредактировал(а) GrayCardinal - 23.10.2004, 09:51


--------------------
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Linux/UNIX: Oбщие вопросы"
nickless
Imple
nerezus

В тему здесь вопросы общие - не привязанные к определенному ПО или дистрибутиву BSD/Linux/UNIX.
Например вопросы о выборе ОС для определенных задач (но если Вы просто хотите узнать "Какой дистрибутив лучше", то для этого есть Клуб юнуксоидов).
Общие вопросы по shell-программированию тоже лучше задавать здесь.


  • Вопросы мобильной разработки тут
  • Вы должны соблюдать правила форума.
  • Помните: какой вопрос, такой и ответ. Прежде чем задать вопрос прочитайте вот эту статью на форуме CIT.
  • Оскорблять запрещается.
  • Религиозные войны в Религиозных войнах.
  • Общение "просто так" в Клубе юнуксоидов. В отличие от многих других разделов, здесь разрешается сдержанно оффтопить и юморить в тему.

За интересные статьи, находки, решения, программы и просто реальную помощь будут ставиться + в репу).


В данный момент этот раздел модерируют nerezus, nickless, powerfox, pythonwin, Imple и ZeeLax. Если вы хотите помочь нам, пишите в ПМ и мы обсудим.


Спасибо. И use UNIX or die; С уважением, nerezus, nickless, powerfox, pythonwin, Imple, ZeeLax.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | *NIX системы: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0425 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.