4.5 KiB
Реализация сетевого серверного приложения "Лабиринт" на основе многопоточности
При подключении клиента сервер порождает новый поток для работы с этим клиентом.
Протокол пользовательского уровня
UML-диаграмма протокола пользовательского уровня представлена на рисунке ниже.
Описание работы приложения
Сервер maze-server ожидает подключения клиентов по протоколу TCP на заданный порт (по умолчанию 1024). После установления соединения сервер запрашивает имя игрока, а затем начинает игру в лабиринте. Лабиринт генерируется случайным образом при старте каждой новой игровой сессии. Гарантируется наличие хотя бы одного пути из начальной точки (0, 0) в конечную точку (2, 2). Добавление дополнительных стен происходит с соблюдением условия достижимости цели.
Cхема и нумерация клеток лабиринта представлена на рисунке ниже.
Клиент отправляет команды движения ("вперёд", "направо", "налево", "назад") или команду "сдаюсь" для завершения игры. Сервер обрабатывает команды, проверяет возможность хода, обновляет состояние лабиринта и отправляет клиенту текстовый ответ с результатом хода, количеством оставшихся ходов и текущей позицией (в формате координат). Игра завершается, если игрок достигает конечной точки (позиция 8), исчерпывает ходы или сдаётся.
Запуск сервера
Приложение сервера при запуске принимает следующие необязательные ключи:
-h— задаёт имя хоста, к которому будет привязан сокет;-p— задаёт номер порта для прослушивания;-n— задаёт максимальное количество шагов, разрешённое для одного игрока;-s— включает сервисный режим (без ограничений по количеству шагов).
./maze-server -h localhost -p 1024 -n 10 -s
По умолчанию сокет сервера связывается с адресом localhost:1024, игрокам разрешено 10 шагов, сервисный режим выключен.
Завершения работы сервера — Ctrl+C.
Клиент подключается к серверу, отправляет своё имя и получает интерактивную игру в лабиринт. Поддерживаемые команды:
вперёд— перемещение вверх;направо— перемещение вправо;налево— перемещение влево;назад— перемещение вниз;cдаюсь— завершение игры досрочно.
Если игрок исчерпал все ходы, но не дошёл до финиша, он считается проигравшим. Финиш находится в позиции (2, 2) (координаты x, y).
Запуск клиента
Приложение клиента при запуске принимает два необязательных ключа:
-
-h— задаёт имя хоста сервера для подключения; -
-p— задаёт номер порта сервера.
./maze_client -h localhost -p 1024
По умолчанию клиент пытается подключиться к адресу localhost:1024.