Ниже описан прикладной сетевой протокол на TCP между клиентом (игроком) и сервером («закрыватель») для игры «Угадайка». Соединение устанавливается по TCP, все сообщения передаются в текстовом формате UTF-8, каждая строка заканчивается символом \n (LF).
| Команда | Формат | Описание |
|---|---|---|
| Приветствие | HELLO <имя_игрока>\n |
Инициация новой игры. Сервер генерирует число. |
| Режим тестирования | TESTMODE\n |
Сервер подтверждает, без ограничения числа ходов. |
| Задать вопрос | GT <оператор> <число>\n |
Вопрос о загаданном числе: >, < или =. |
| Ответ | Формат | Описание |
|---|---|---|
| Диапазон для игры | RANGE <min> <max>\n |
Присылается после HELLO: границы (включительно) начального диапазона поиска. |
| Корректный ответ | OK\n |
Сервер подтвердил частичный вопрос (> или <) без победы. |
| Результат сравнения | YES\n / NO\n |
Ответ на GT = <число>: угадал (YES) или нет (NO). |
| Победа | WIN\n |
Сервер сообщает, что число угадано; после этого соединение закрывается. |
| Ошибка | ERROR <текст>\n |
Некорректная команда или значение вне диапазона. |
-
Установка соединения Клиент подключается к серверу по TCP.
-
Приветствие Клиент отправляет:
HELLO Ivan\nСервер отвечает, выбирая случайное число
Xв диапазоне$1, 100$ (по умолчанию):RANGE 1 100\n -
Игровой цикл
-
Клиент задаёт вопросы вида:
GT > 50\n # "X > 50?" GT < 75\n # "X < 75?" GT = 73\n # "X == 73?" -
Сервер проверяет:
-
Если оператор
>или<и число в текущем диапазоне:- При верном утверждении сужает границы диапазона и отвечает
OK. - Иначе отвечает
NO.
- При верном утверждении сужает границы диапазона и отвечает
-
Если оператор
=:- При совпадении отвечает
YESи сразу после —WIN. - Иначе —
NO.
- При совпадении отвечает
-
Если команда некорректна —
ERROR <текст>.
-
-
После каждого
OKклиент может визуально обновлять локальный диапазон и продолжать. -
При получении
WINклиент завершается.
-
-
Завершение Сервер закрывает сокет после
WINили при ошибках/тайм-ауте. Клиент закрывает соединение после победы.
# Клиент → Сервер
HELLO Ivan
# Сервер → Клиент
RANGE 1 100
# Клиент → Сервер
GT > 50
# Сервер → Клиент
OK
# Клиент → Сервер
GT < 75
# Сервер → Клиент
OK
# Клиент → Сервер
GT = 73
# Сервер → Клиент
YES
WIN
- Поддерживается режим без ограничения числа ходов (
TESTMODE). В этом случае после приветствия клиент может отправитьTESTMODE, и сервер просто ответитOK. - Все ошибки и некорректные запросы сопровождаются префиксом
ERROR. - Сервер работает в неблокирующем режиме с использованием
poll()и поддерживает нескольких клиентов одновременно.