Как послать бродкастный пакет udp
Протокол UDP позволяет рассылать сообщения с помощью широковещательной групповой рассылки. При такой рассылке клиенту достаточно отправить одно сообщение, и его получат все остальные клиенты, которые подключены к группе. И нет надобности отправлять одно сообщение каждому отдельному клиенту.
При использовании широковещательной передачи надо учитывать, что передача не идет дальше локальных сетей, так как маршрутизаторы подобные рассылки не пропускают.
Ключевым в данном случае является метод JoinMulticastGroup() , который позволяет присоединиться клиенту к группе в локальной сети. Благодаря этому объект UdpClient сможет получать дейтаграммы, которые предназначаются всей группы объектов UdpClient.
Для присоединения к группе в метод JoinMulticastGroup передается адрес группы. В качестве адреса может использоваться один из адресов в диапазоне от 224.0.0.0 до 239.255.255.255.
Создадим приложение, которое будет использовать широковещательную рассылку. Если оталкиваться от проекта из прошлой темы, то для поддержки групповой рассылки достаточно добавить в потоке получения данных вызов метода JoinMulticastGroup() :
Метод JoinMulticastGroup() принимает два параметра: адрес групповой рассылки (должен быть одним и тем же для всей группы клиентов) и число проходов через маршрутизаторы. То есть пока сообщение достигнет получателя, оно может пройти через некоторое число маршрутизаторов, которые направят его по нужному пути. В данном случае число 50 означает, что чтобы пройти от компьютера-отправителя к компьютеру-получателю, дейтаграмма может миновать 50 маршрутизаторов.
На основе Udp-чата из прошлой темы сделаем консольный чат с применением широковещательной рассылки:
Теперь для групповой рассылки в локальной сети будет использоваться адрес «235.5.5.11», в качестве порта — 8001. Причем поскольку отправленное пользователем сообщение будет транслироваться всем в группе, в том числе и ему самому, то чтобы сообщение не дублировать в консоли, то в данном случае проверяется адрес отправителя с помощью вспомогательного метода LocalIPAddress(). Если адрес отправителя и получателя совпадает, то ему сообщение не выводится.
После построения проекта мы можем запустить скомпилированное приложение на разных машинах в локальной сети.
Как посылать сообщения с UDP broadcast сервера и прослушивать их на подключенном к нему клиенте?
Всем привет. Хочу сделать так, чтобы мой сервер мог посылать свои сообщения на широковещательный канал. Клиенты в свою очередь к этому UPD-серверу должны быть подключены и получали от него пакеты.
Как я понимаю это всё должно быть просто (Сторона сервера):
- Сначала я создаю instance UdpClient:
- Далее я рассылаю сообщения в broadcast
- Тут я просто инициализирую клиента и в конструкторе указываю какой сервер нужно прослушивать:
- Собственно жду, пока broadcast сервер начнёт вещать:
Уже второй день мучаюсь с этой казалось бы лёгкой вещью. С теоретической т.з. я хорошо понимаю о чём тут идёт речь, но почему я просто не могу прослушать то, что посылает сервер клиентам?
Как сделать broadcast рассылку сообщений по UDP используя Socket?
К нему подключаются клиенты, шлют что-то, он в отдельном потоке потихоньку это что-то слушает и реагирует.
Тут всё работает.
В какой-то момент времени нужно всем клиентам рассказать, что что-то произошло.
Я по наивности своей решил, что это делается вот так:
И получаю в этом месте исключение
Было у меня подозрение, что косяк в том, что сокет просто занят в данный момент времени прослушиванием, поэтому ему не до отправки. Но проверка показала, что это не так.
Прошу подсказки: куда копать?
Заранее всем спасибо за советы
- Вопрос задан более года назад
- 302 просмотра
- Вконтакте

Сам спросил, сам ответил.
Оказывается, нужно было чуть внимательнее читать документацию, хотя там и не всё так очевидно.
Цитата с сайта майкрософт:
Ну и применять вместо Send нужно SendTo, просто ему вместо конкретного адреса в EndPoint передавать