Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Протокол UDP

9.3K
15 октября 2006 года
Cezar
16 / / 21.05.2005
Как запрогамировать UDP, что бы один компютер выкидывает определённые запрос и все компютеры(на которых соответстсвено запущена прога) в сети его обрабатывают.
8.7K
15 октября 2006 года
Rubicon
55 / / 28.10.2005
так тебе реализовать принцип нужно или что? про UDP посмотри в RFC (номер не помню --- ответит любой поисковик). Хотя такой принцип работы проги можно как угодно рализовать --- протокол (TCP/UDP) здесь не принципиален:
клиент "ждет" пакета-запроса, а сервер отправляет его широковешательным пакетом.
240
15 октября 2006 года
aks
2.5K / / 14.07.2006
Да вобще то он видимо про широковещательные сообщения с помощью UDP спрашивал =)
12K
15 октября 2006 года
rjx
55 / / 11.03.2006
[QUOTE=Cezar]Как запрогамировать UDP, что бы один компютер выкидывает определённые запрос и все компютеры(на которых соответстсвено запущена прога) в сети его обрабатывают.[/QUOTE]

Протокол UDP здесь совершенно не при чём. Существует такая вещь, как мультикастовое вещание, и находится она не на транспортном, а на сетевом или канальном уровне модели OSI, т.е. на уровне ip или mac адресов. Хотя транспортный протопол UPD наиболее подходит для этих целей.

Если нужна работа не только в одной подсети, то также необходим маршрутизатор с поддержкой "multicast routing".

Советую копнуть в сторону протокола igmp, который как раз управляет работой многоадресного вещания в сети, и на каждом клиенте должна быть установлена соотв. служба.

Хотя, если немного пошаманить, можно применить библиотеку pcap (ну, или WinPCap), снифить трафик в сегмент сети, и реагировать на запрос к определённому ip (естественно, свободному для данного сегмента).
9.3K
15 октября 2006 года
Cezar
16 / / 21.05.2005
[QUOTE=aks]Да вобще то он видимо про широковещательные сообщения с помощью UDP спрашивал =)[/QUOTE]
Имено я спрашивал про широковешательно сообщение.... :) только тогда не как не мог сообразить как же это называеться....
[QUOTE=rjx]Протокол UDP здесь совершенно не при чём. Существует такая вещь, как мультикастовое вещание, и находится она не на транспортном, а на сетевом или канальном уровне модели OSI, т.е. на уровне ip или mac адресов. Хотя транспортный протопол UPD наиболее подходит для этих целей.

Если нужна работа не только в одной подсети, то также необходим маршрутизатор с поддержкой "multicast routing".

Советую копнуть в сторону протокола igmp, который как раз управляет работой многоадресного вещания в сети, и на каждом клиенте должна быть установлена соотв. служба.

Хотя, если немного пошаманить, можно применить библиотеку pcap (ну, или WinPCap), снифить трафик в сегмент сети, и реагировать на запрос к определённому ip (естественно, свободному для данного сегмента).[/QUOTE]
wincap мне не нужен...мне надо зделать что-то похоже на получение ip.
если я понел нужен выкинуть пакет UDP с ip 255.255.255.255.
И мне нужен именно UDP нехочу сеть загружать лишней информацией. Сеть стабильно пакет дойдёт без проблем и без ошибок.
Всё это должно происходить в одной сети с одной маской
12K
16 октября 2006 года
rjx
55 / / 11.03.2006
[QUOTE=Cezar]...нужен выкинуть пакет UDP с ip 255.255.255.255.[/QUOTE]

Вот этого уж точно не получится, т.к. спецификация протокола этого не позволит, кроме как через raw-socket и ручное формирование пакета. Но тут есть 2 проблемы: абсолютно никакая кросплатформенность и необходимость админских прав как на сервере, так и на клиентах.
240
16 октября 2006 года
aks
2.5K / / 14.07.2006
Код:
sockaddr_in addr;
s = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
addr.sin_addr.s_addr=inet_addr("0.0.0.0") ;
addr.sin_family=AF_INET ;
addr.sin_port=htons(BROADCASTPORT) ;
bind(s,(const sockaddr*)&addr,sizeof(addr)) ;
int b=1;
setsockopt(s, SOL_SOCKET, SO_BROADCAST, &b, sizeof(b));

addr.sin_addr.s_addr=inet_addr("255.255.255.255") ;
addr.sin_family=AF_INET ;
addr.sin_port=htons(BROADCASTPORT) ;

sendto(s, ...);
char buf[] = "helloworld";
sendto(s, buf, strlen(buf)+1,0,(sockaddr *)&addr, sizeof(sockaddr_in));
close(s);

Примерно так. Только конечно не забыть обрабатывать результат возвращаемый сетевыми функциями на предмет ошибок, что мне было лень делать в примере.
И конечно помнить, что тот адресс 255.255.255.255, на который отсылается бродкаст - зависит от настроек сети. Тоесть какие адреса в конктетной сети определенные под бродкастные сообщения.
9.3K
16 октября 2006 года
Cezar
16 / / 21.05.2005
[QUOTE=aks]
Код:
sockaddr_in addr;
s = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
addr.sin_addr.s_addr=inet_addr("0.0.0.0") ;
addr.sin_family=AF_INET ;
addr.sin_port=htons(BROADCASTPORT) ;
bind(s,(const sockaddr*)&addr,sizeof(addr)) ;
int b=1;
setsockopt(s, SOL_SOCKET, SO_BROADCAST, &b, sizeof(b));

addr.sin_addr.s_addr=inet_addr("255.255.255.255") ;
addr.sin_family=AF_INET ;
addr.sin_port=htons(BROADCASTPORT) ;

sendto(s, ...);
char buf[] = "helloworld";
sendto(s, buf, strlen(buf)+1,0,(sockaddr *)&addr, sizeof(sockaddr_in));
close(s);

Примерно так. Только конечно не забыть обрабатывать результат возвращаемый сетевыми функциями на предмет ошибок, что мне было лень делать в примере.
И конечно помнить, что тот адресс 255.255.255.255, на который отсылается бродкаст - зависит от настроек сети. Тоесть какие адреса в конктетной сети определенные под бродкастные сообщения.[/QUOTE]
Пасибо...только я твой код чуть подправлю. Там есть ошибки. Я знаю что ты писла на обум. Просто малоли кто зайдёт из начинающих и не сможет его скомпить.

sockaddr_in addr;
SOCKET s;

s = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
addr.sin_addr.s_addr=inet_addr("0.0.0.0") ;
addr.sin_family=AF_INET ;
addr.sin_port=htons(INADDR_BROADCAST) ;
bind(s,(const sockaddr*)&addr,sizeof(addr)) ;
const char b=1;

setsockopt(s, SOL_SOCKET, SO_BROADCAST, &b, sizeof(b));

addr.sin_addr.s_addr=inet_addr("255.255.255.255") ;
addr.sin_family=AF_INET ;
addr.sin_port=htons(INADDR_BROADCAST) ;

char buf[] = "helloworld";
sendto(s, buf, strlen(buf)+1,0,(sockaddr *)&addr, sizeof(sockaddr_in));
closesocket(s);
547
17 октября 2006 года
Hydra
488 / / 20.06.2006
Все равно облом будет: ошибка WSAEACCES
9.3K
17 октября 2006 года
Cezar
16 / / 21.05.2005
[QUOTE=Hydra]Все равно облом будет: ошибка WSAEACCES[/QUOTE]
Насчёт облома незнаю...у меня работает.
Кстате есть команентs INDI servers и INDI clients, так вот там и есть комапанент для UDP и одно из его свойств разрешить или запретить широковешательный пакет
547
18 октября 2006 года
Hydra
488 / / 20.06.2006
Sorry - понял. Фишка в
 
Код:
addr.sin_port=htons(INADDR_BROADCAST) ;
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог