Вопрос

Может быть, решение об этом очень просто, и я слишком глуп, чтобы увидеть это. Мне нужно перекомпилировать старое приложение с Indy 10, и эта линия раньше была

inUDPServer.Binding.SetSockOpt(Id_IPPROTO_IP, Id_IP_ADD_MEMBERSHIP, PChar(@mreq), SizeOf(mreq));

но новый Tidsockethandle.setsockopt берет 3 целых числа. Как я должен предоставить ip_mreq? Просто передавая IMR_MULTIADDR.S_ADDR приводит к ошибке #10014 - Buffer Fault. Может быть, у одного из вас, ребята, есть идея.

Ура Энди

Это было полезно?

Решение

Использовать TIdSocketHandle.AddMulticastMembership() Вместо этого метод (если ваша версия Indy 10 не имеет этого метода, то вам сначала придется обновить более новый снимок), например:

inUDPServer.Binding.AddMulticastMembership('Group IP address');

Это добавляет TIdSocketHandle.IP Адрес к членству указанной группы IP. IPS может быть указан как IPv4 или IPv6, в зависимости от настройки TIdSocketHandle.IPVersion имущество.

В качестве альтернативы рассмотрите возможность использования TIdIPMCastServer а также TIdIPMCastClient компоненты вместо TIdUDPServer напрямую.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top