Что требуется для UDP-трансляции в C? - PullRequest
1 голос
/ 17 октября 2010

Я работаю в эфире, и мне очень плохо удается даже заставить это работать.Я знаю, что должен выполнить вызов setsockopt (), но что нужно перед этим, чтобы трансляция шла на каждый ящик в сети?Я смутно помню что-то о дополнении сетевого адреса или что-то подобное.Я ценю помощь.

Ответы [ 2 ]

1 голос
/ 21 октября 2010

Вам не нужно использовать setsockopt ().Пакет UDP, отправленный на специальный адрес 255.255.255.255, будет отправлен на все адреса в локальной сети.

Если сеть, на которую вы хотите транслировать, не является локальной, вам нужно использовать широковещательный адрес этой сети (согласно комментарию ivymike), который по соглашению обычно (но не всегда) является последним IP в подсети..

Имейте в виду, что широковещательные адреса используются во многих атаках DOS и могут быть отфильтрованы.

0 голосов
/ 29 апреля 2015

Я не уверен, что принятый ответ верен, когда речь идет о мире Windows.

У меня есть класс UDPSocket, вдохновленный этим ответом .Это использовалось в течение долгого времени и функционирует нормально.Но я просто попытался использовать ее для создания функции WakeOnLan(), которая транслирует на 255.255.255.255, и вызов sendto() не удался с ошибкой сокета Windows 10013 - Отказано в доступе (по крайней мере, как было проверено в моей системе Windows 7).*

Поэтому я расширил свой конструктор UDPSocket с помощью вызова setsockopt(), основанного на ответе Реми Лебо на этот вопрос , размещенном сразу после вызова socket().Это включило широковещательную рассылку и было отсутствующей ссылкой при создании моей функции WakeOnLan().

Я не предполагаю, что это "ответ", но это слишком долго для комментария, и вики сообщества может понравитьсяредактировать более общую истину в этом ответе в интересах тех, кто находит принятый ответ, не хватает.

...