UDP-трансляция для обнаружения компьютера в локальной сети и настройки сервера - PullRequest
7 голосов
/ 18 июня 2011

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

  • Можно ли использовать один сокет UDP для прослушивания и отправки трансляций?Я почти уверен, что ответ на этот вопрос - да, но я хотел проверить это.
  • При использовании UDP вам действительно нужно использовать bind()?Насколько я понимаю, connect() не требуется, как и send()/recv(), поскольку они предназначены для TCP (sendto()/recvfrom() является заменой).

1 Ответ

4 голосов
/ 18 июня 2011
  1. Да, вы можете отправлять широковещательные рассылки, одноадресные рассылки и принимать пакеты (широковещательные или одноадресные) - все из одного сокета. Это ОЧЕНЬ полезно для того, чтобы заставить работать "ответить отправителю".

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

  3. Привязка обоих концов к фиксированным номерам портов, однако, упрощает настройку брандмауэра.

  4. setsockopt(SO_BROADCAST), в противном случае вы получите ошибки при отправке широковещательных пакетов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...