Можно ли принимать широковещательные сообщения UDP несколькими приложениями на одном компьютере?

В качестве примера предположим, что у меня есть "умный" термометр, который передает текущую температуру в виде UDP-дейтаграммы каждые N секунд.

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

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

Это: -

  • A: Точно так же, как с широковещательными передачами UDP, во всех операционных системах?
  • B: ограничение сетевого стека Windows?
  • C: или, возможно, ошибка в том, как я читаю дейтаграммы?

Если A или B, есть ли способ обойти его.

Если C, то я отправлю код.

Ответ 1

В Windows вы можете подключить несколько процессов к одному и тому же сокету с помощью

SocketOptionName.ReuseAddress

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

В ответ Родди, да, SO_REUSEADDR работает так же на * nix тоже.

Подробный ответ см. в fooobar.com/info/15470/....