Я сейчас пытаюсь сделать онлайн-видео-игру, в которой в настоящее время используется TCP для отправки пакетов. Я хочу использовать UDP, но я очень новичок в UDP, и у меня возникают некоторые проблемы.Тестирование UDP на localhost
Когда я тестирую свой сервер/клиент (ы) на том же компьютере (localhost), пакеты, похоже, мешают друг другу.
Например, если клиент отправляет пакет на сервер (UDP, 127.0.0.1:1338), клиент получает пакет, так как клиент также прослушивает пакеты с 127.0.0.1 на порте 1338. Аналогичным образом, когда я пытаюсь протестировать 2 клиента и 1 сервер, клиенты могут отправлять пакеты, предназначенные для сервера, но подбираются другим клиентом.
Как я могу проверить UDP на локальном хосте, поскольку все пакеты принимаются или отправляются на 127.0.0.1:1338? Нужно ли мне реализовать какой-то слой в моих пакетах, который отличает, предназначен ли пакет для сервера или конкретного клиента?
Существует ли конкретный метод выбора номера порта на клиенте? Или я просто выбираю случайный порт между определенным диапазоном? – Brad
Вам не обязательно предоставлять порт на сокет, он автоматически получит бесплатный доступ к операционной системе. См. Пример кода конструктора сокета в MSDN (http://msdn.microsoft.com/en-us/library/2b86d684.aspx). Нет Bind ... –
@Brad Извините, я ошибся в своем предыдущем комментарии: Конечно, вам нужно привязать порт прослушивания клиента, но вам не нужно указывать номер порта. Просто передайте 0 в качестве номера порта. Из документации MSDN Socket.Bind (http://msdn.microsoft.com/en-us/library/system.net.sockets.socket.bind.aspx): «Если вам не нравится, какой локальный порт используется, вы можете создать IPEndPoint, используя 0. для номера порта. В этом случае поставщик услуг назначит доступный номер порта от 1024 до 5000.» –