Делаете UDP протоколом, ориентированным на соединение?

Я сделал онлайн-игру, которая использует протокол UDP для связи между клиентами и сервером. Однако, поскольку UDP не требует соединения, я не могу определить, закрыл ли клиент игру или произошла ошибка в сети. Поэтому мне нужно сделать UDP протоколом, ориентированным на соединение, или, по крайней мере, обнаружить сетевые ошибки. Как я мог сделать это? Как ориентировано TCP соединение?

2 ответа

Решение

Во-первых, я понимаю, что вам нужен UDP из-за эффективности, но, возможно, вы могли бы попробовать попробовать TCP?

В противном случае я бы просто сделал, как упоминал @Phil Taprogge. Отправьте определенный пакет UDP, который идентифицируется сервером каждые n секунд. Если сервер не получает его в течение 3*n секунд, вполне вероятно, что клиент отключился.

Как вы говорите, UDP не имеет понятия о соединениях. Таким образом, единственный способ достичь того, чего вы хотите, - это реализовать необходимую логику самостоятельно поверх UDP.

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

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