![]() |
|
Модераторы: xvr |
![]()
|
|
| 4eJIoBekMoJIekyJIa |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 103 Регистрация: 2.11.2007 Репутация: нет Всего: нет |
Всем привет. Как можно отправить сообщение сразу на несколько сокетов с помощью юдп?
--------------------
|
|||
|
||||
| MAKCim |
|
||||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
использовать мультикастный адрес естественно, хосты должны подписаться на него
Добавлено через 3 минуты и 54 секунды 4eJIoBekMoJIekyJIa, прежде чем создавать новые темы разберись со старыми а то некрасиво получается -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
||||
|
|||||
| 4eJIoBekMoJIekyJIa |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 103 Регистрация: 2.11.2007 Репутация: нет Всего: нет |
не мог бы ты обьяснить как должна быть заполнена структура ip_mreqn ?
на сколько я понял в структуре есть поля локальный ip и ip группы, но почему то нет номеров портов. Это сообщение отредактировал(а) 4eJIoBekMoJIekyJIa - 21.5.2008, 12:22 --------------------
|
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
порт задается через bind() если в системе есть только один сетевой интерфейс, в ip_mreqn нужно указать только адрес группы (остальные поля = 0) если больше одного, то еще и локальный адрес интерфейса в этом случае imr_address должен совпадать с sockaddr_in.sin_addr, который передается в bind() -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| 4eJIoBekMoJIekyJIa |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 103 Регистрация: 2.11.2007 Репутация: нет Всего: нет |
не понял, на мультикастный адрес должны подписываться те,кому мы будем отправлять сообщения?
Мультикастный адрес должен както по особенному задаваться или просто как обычный ip адрес? --------------------
|
|||
|
||||
| MAKCim |
|
||||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
да
любой адрес из 224.0.0.0 - 239.255.255.255 является мультикастным -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
||||
|
|||||
| 4eJIoBekMoJIekyJIa |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 103 Регистрация: 2.11.2007 Репутация: нет Всего: нет |
а если адрес 194.х.х.х что нельзя сделать его мультикастным?
--------------------
|
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
мультикастные адреса сродни адресам private-сетей они фиксированы в рамках LAN ты можешь выбрать любой мультикастный адрес из диапазона 224.0.0.0 - 224.0.0.255 главное, чтобы целевые хосты на него подписались вообщем, читать тут -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| 4eJIoBekMoJIekyJIa |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 103 Регистрация: 2.11.2007 Репутация: нет Всего: нет |
Прочитал спс, то есть алгоритм отправления такой: связываем с мультикастным адресом сокеты которые будут получать, отправляем с "сокета-отправителя" сообщение на мультикастный адрес там он переправляется всем кто на него подписан.
Правильно? И еще такой вопрос как-нибудь можно выяснить сколько сокетов подписано на мультикастный адрес? Это сообщение отредактировал(а) 4eJIoBekMoJIekyJIa - 22.5.2008, 13:56 --------------------
|
|||
|
||||
| 4eJIoBekMoJIekyJIa |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 103 Регистрация: 2.11.2007 Репутация: нет Всего: нет |
смотри есть такое простое приложение в нем к серверу подключаеться несколько клиентов и им отправляеться сообщение
сервер:
клиент:
когда я запускаю одновременно сервер и несколько клиентов то все клиенты пишут recv error и выходят. Не пойму в udp recvfrom не блокирует приложение до получения сообщения чтоли? --------------------
|
||||
|
|||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
да
ICMP echo request на мультикастный адрес программы посмотрю потом -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| 4eJIoBekMoJIekyJIa |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 103 Регистрация: 2.11.2007 Репутация: нет Всего: нет |
не мог бы ты посмотреть, мне просто завтра к 12 надо сдавать...
Я видимо чтото недопонимаю в том как работает multicastные айпи --------------------
|
|||
|
||||
| MAKCim |
|
||||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
уже, видимо, не актуально
скорее всего допустим, есть LAN в нем есть сервер, который с определенной частотой передает какую-то информацию заинтересованным в ее получении клинтам заинтересованность определяется подпиской на multicast-адрес (IP_ADD_MEMBERSHIP) при получении пакета клиентом на уровне NIC осуществляется проверка целевого адреса (MAC-адреса) если он является multicast-адресом, то идет поиск в списке (или хэш-таблице) зарегистрированных в NIC multicast-адресов (первое назначение imr_multiaddr в ip_mreqn и единственное назначение imr_address там же) если совпадение найдено, то пакет принимается (несовершенная фильтрация на уровне NIC) и передается на уровень L1, потом на L2 и L3 на уровне L3 (сетевой уровень) осуществляется совершенная фильтрация (второе назначение imr_multiaddr) (т. к разным multicast-адресам могут соответствовать одинаковые MAC-адреса) если проверка успешна, идет передача пакета на L4 (UDP) конкретному сокету Это сообщение отредактировал(а) MAKCim - 24.5.2008, 11:59 -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
||||
|
|||||
| 4eJIoBekMoJIekyJIa |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 103 Регистрация: 2.11.2007 Репутация: нет Всего: нет |
А понял, спасибо.
Еще не мог бы ты помочь с select'ом, когда через tcp, то понятно, там после accept'a выдаются связанные сокеты. А когда через юдп, я сначала вызываю
после вызова, насколько я понимаю, в cl_addr занесутся данные того кто прислал сообщение. мне нужно создать новый сокет забинденный к cl_addr и потом по нему вызывать select? Это сообщение отредактировал(а) 4eJIoBekMoJIekyJIa - 26.5.2008, 20:11 --------------------
|
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
4eJIoBekMoJIekyJIa,
после получения пакета, отправляешь нужный пакет по адресу cl_addr зачем тут select()? -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
![]()
|
| Правила форума "С/С++: Программирование под Unix/Linux" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |