Можно ли принимать 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.