Skip to content

Kraken34/temp

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 

Repository files navigation

Угадайка: Протокол взаимодействия клиент–сервер

Ниже описан прикладной сетевой протокол на 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 Некорректная команда или значение вне диапазона.

Описание работы

  1. Установка соединения Клиент подключается к серверу по TCP.

  2. Приветствие Клиент отправляет:

    HELLO Ivan\n
    

    Сервер отвечает, выбирая случайное число X в диапазоне $1, 100$ (по умолчанию):

    RANGE 1 100\n
    
  3. Игровой цикл

    • Клиент задаёт вопросы вида:

      GT > 50\n    # "X > 50?"
      GT < 75\n    # "X < 75?"
      GT = 73\n    # "X == 73?"
      
    • Сервер проверяет:

      • Если оператор > или < и число в текущем диапазоне:

        • При верном утверждении сужает границы диапазона и отвечает OK.
        • Иначе отвечает NO.
      • Если оператор =:

        • При совпадении отвечает YES и сразу после — WIN.
        • Иначе — NO.
      • Если команда некорректна — ERROR <текст>.

    • После каждого OK клиент может визуально обновлять локальный диапазон и продолжать.

    • При получении WIN клиент завершается.

  4. Завершение Сервер закрывает сокет после WIN или при ошибках/тайм-ауте. Клиент закрывает соединение после победы.

Пример сессии

# Клиент → Сервер
HELLO Ivan

# Сервер → Клиент
RANGE 1 100

# Клиент → Сервер
GT > 50

# Сервер → Клиент
OK

# Клиент → Сервер
GT < 75

# Сервер → Клиент
OK

# Клиент → Сервер
GT = 73

# Сервер → Клиент
YES
WIN

Примечания

  • Поддерживается режим без ограничения числа ходов (TESTMODE). В этом случае после приветствия клиент может отправить TESTMODE, и сервер просто ответит OK.
  • Все ошибки и некорректные запросы сопровождаются префиксом ERROR.
  • Сервер работает в неблокирующем режиме с использованием poll() и поддерживает нескольких клиентов одновременно.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published