Модераторы: feodorv
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> настройка сокета для отправки на групповой адрес, параметры сокета для multicast 
V
    Опции темы
petlyura
Дата 15.2.2013, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 162
Регистрация: 30.1.2008
Где: Харьков

Репутация: нет
Всего: 2



Код
WSADATA data;
  sockaddr_in addr;
  WSAStartup(0x0101, &data); 


  char name[40];
  int error = gethostname(name, sizeof(name));


  SocketSend = socket(AF_INET, SOCK_DGRAM, 0);
  setmem(&addr, sizeof(addr), 0);
  addr.sin_family = AF_INET;

  addr.sin_port = htons(RemotePort);
  addr.sin_addr.S_un.S_addr = INADDR_ANY;



  struct ip_mreq mcast;

  mcast.imr_multiaddr.s_addr = inet_addr(Address.c_str());
  mcast.imr_interface.s_addr = INADDR_ANY;





  int optval = 1; 
  error = setsockopt(SocketSend, IPPROTO_IP, IP_MULTICAST_LOOP, (char*)&optval, sizeof(optval));

  int optval1 = 1; 
  error = setsockopt(SocketSend, IPPROTO_IP, IP_MULTICAST_TTL, (char*)&optval1, sizeof(optval1));

  error = setsockopt(SocketSend, IPPROTO_IP, IP_MULTICAST_IF, (char*)& mcast.imr_interface.s_addr, sizeof( mcast.imr_interface.s_addr));

    
  error = setsockopt(SocketSend, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char*)&mcast, sizeof(mcast));


в общем пакет отправляется и доходит до получателя, если IP-шник в стиле 192.168.Х.Х, etc. Но мне нужно для multicast-адреса 224.0.0.222 (пример) и тут беда, пакет где-то теряется. сниффером слушаю порт. В первом случае видит, во втором - нет :(
что в мультикаст нужно настроить, чтобы работало? зы. может, даже не тут проблема?
плиз, хелп ми, сетевые маги Винграда  smile

спасибо  smile 
PM MAIL   Вверх
feodorv
Дата 15.2.2013, 20:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 10
Всего: 45





--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
petlyura
Дата 25.2.2013, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 162
Регистрация: 30.1.2008
Где: Харьков

Репутация: нет
Всего: 2



Цитата(feodorv @ 15.2.2013,  20:32)
Как-то так...

спасибо большое, но почему-то не работает. мой сверху код не отличается от того, что по ссылке. значение TTL я менял. 
отправка пакета осуществляется так:
Код
  sockaddr_in addr;
  setmem(&addr, sizeof(addr), 0);
  addr.sin_family = AF_INET;
  addr.sin_port = htons(RemotePort);
  
  addr.sin_addr.S_un.S_addr = inet_addr(Address.c_str());

  sendto(SocketSend, buf, len, 0, (sockaddr*)&addr, sizeof(sockaddr_in));



зы. Address - "224.0.0.222"


PM MAIL   Вверх
feodorv
Дата 27.2.2013, 18:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 10
Всего: 45



Цитата(petlyura @  25.2.2013,  18:13 Найти цитируемый пост)
Address - "224.0.0.222"

Цитата

A multicast router does not forward multicast datagrams with destination addresses between 224.0.0.0 and 224.0.0.255, inclusive, regardless of their TTLs. This particular range of addresses is reserved for the use of routing protocols and other low-level topology discovery or maintenance protocols, such as gateway discovery and group membership reporting


Добавлено через 9 минут и 6 секунд
Советую также заглянуть сюда...


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
petlyura
Дата 4.3.2013, 10:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 162
Регистрация: 30.1.2008
Где: Харьков

Репутация: нет
Всего: 2



Цитата(feodorv @ 27.2.2013,  18:44)
Цитата(petlyura @  25.2.2013,  18:13 Найти цитируемый пост)
Address - "224.0.0.222"

Цитата

A multicast router does not forward multicast datagrams with destination addresses between 224.0.0.0 and 224.0.0.255, inclusive, regardless of their TTLs. This particular range of addresses is reserved for the use of routing protocols and other low-level topology discovery or maintenance protocols, such as gateway discovery and group membership reporting


Добавлено @ 18:53
Советую также заглянуть сюда...

в итоге победил. на 224.0.0.222 отправляется нормально все smile

проблема оказалась здесь
Код
unsigned long ad = inet_addr(AddressSource.c_str()); // тут у меня что-то стандартное а-ля "192.168.Х.Х"
  setsockopt(SocketSend, IPPROTO_IP, IP_MULTICAST_IF, (char *)&ad, sizeof(ad));

надо было указывать адрес источника, откуда пакет отправляется. Зачем, я до конца не понял, но получилось и то рад, а то стопорнулся проект у меня из-за этого

Спасибо, feodorv, за поддержку! 

Тема закрывается.

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Сети | Следующая тема »


 




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


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

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