C # Как я могу убедиться, что необходимые данные UDP попадают на клиент / сервер? - PullRequest
2 голосов
/ 04 февраля 2012

Я недавно писал сервер UDP для 2D-шутера, который я делаю на C # и XNA для ПК, который будет обновлять и отправлять мировые данные, данные о сущностях, данные чата и т. Д., Когда это необходимо.

Недавно возник вопрос, когда я создавал для игроков способ менять свое оружие;что произойдет, если пакеты, отправленные на сервер с запросом на смену оружия, будут потеряны?Этот вопрос заставил меня задуматься над другим вопросом;как я могу сделать так, чтобы клиент и сервер могли подтвердить получение определенных пакетов или блоков данных?

Итак, я нашел следующее простое решение для решения этой проблемы:

  1. Сервер отправляет пакет (ы), требующие подтверждения.
  2. Клиент получает пакет (ы) и отправляет пакет подтверждения.
  3. Сервер проверяет, подтвердил ли клиент данные.Если клиент этого не сделал, отправьте данные повторно.

Предложенное решение выглядит довольно хорошо, но что произойдет, если в случае потери пакета подтверждения или с ним произойдет что-то непреднамеренное?

Лучшим решением этой проблемы было бы создание сервера и клиента, использующих TCP и UDP;где TCP используется для данных, которые должны попасть туда и прибыть в порядке / в одном мире, а UDP - для данных, которые должны быть там быстро и могут справиться с потерей или ошибкой?

Если сервер TCP / UDPа клиент - лучший выбор, каковы риски и как я могу пойти на это, чтобы реализовать это?

Спасибо.

1 Ответ

1 голос
/ 04 февраля 2012

Вам нужно использовать TCP, если вы хотите гарантировать доставку пакетов. UDP не гарантирует доставку, но TCP встроен в протокол.

...