2010-10-17 2 views
1

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

+2

Опубликуйте полный исходный код. Прочтите страницы руководства. –

+1

Юристы Microsoft позвонили. Они сказали что-то об эволюторах, нарушающих их патент, приведя локальные сети в обход. –

+0

Вам нужно будет направлять свою трансляцию по широковещательному адресу подсети, к которой вы хотите транслировать. Для получения дополнительной информации: http://beej.us/guide/bgnet/output/html/multipage/advanced.html#broadcast – ivymike

ответ

1

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

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

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

+0

Это был ответ, спасибо большое! – evantravers

0

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

У меня есть класс UDPSocket, который вдохновлен this answer. Он используется довольно долго и работает нормально. Но я просто попытался использовать его, чтобы сделать WakeOnLan() функцию, которая вещает на 255.255.255.255 и sendto() Сбой вызова с Windows Socket Error 10013 - Отказано в доступе (по крайней мере, протестирована на моей системе Windows 7).

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

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

Смежные вопросы