Можно ли принимать UDP-трансляции несколькими приложениями на одном компьютере?

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

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

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

Это:-

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

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

Если C, то я выложу некоторый код..

1 ответ

Решение

В Windows вы можете связать несколько процессов с одним сокетом, используя

SocketOptionName.ReuseAddress

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

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

Подробный ответ см. По /questions/30743125/parametryi-soketov-soreuseaddr-i-soreuseport-chem-oni-otlichayutsya-oznachayut-li-oni-odno-i-to-zhe-vo-vseh-osnovnyih-operatsionnyih-sistemah/30743135#30743135.

Другие вопросы по тегам