-
Необходимо перейти в корневую директорию и выполнить команду для сборки проекта
make
-
Исполняемые файлы появятся в папке
bin
-
Для удаления всех объектных и исполняемых файлов необходимо выполнить команду
make clean
Задание 1. Реализовать 2 программы: первая сервер, вторая клиент. Сервер создает очередь сообщений и записывает сообщение виде строки Hi!
, ждет ответа от клиента и выводит на экран, удаляет очередь. Клиент подключается к очереди, считывает сообщение от сервера, выводит на экран, отвечает серверу сообщением в виде строки Hello!
. Сделать это как для POSIX, так и для SYSTEM V стандартов.
Убедимся, что программа работает, запустив сервер, а затем клиента:
Note
Результат работы для POSIX и SYSTEM V стандартов будет одинаковый.
Задание 2. Написать 2 программы: первая сервер, вторая клиент. Сервер создает очередь сообщений для реализации чата с общей комнатой (если необходимо, то можно и больше очередей создать) и его задача уведомлять клиентов о появлении новых участников, о новых сообщениях. Клиент подключается к очереди, созданной сервером, сообщает ему свое имя и получает в ответ все сообщения в комнате. Далее может отправлять сообщения в общий чат. Получение служебных сообщений от сервера (имена новых клиентов, сообщения от других пользователей) и отправка сообщений в чат лучше реализовать в разных потоках. Интерфейс клиента реализуем с помощью библиотеки ncurses.
Запуск
- Запуск сервера:
./t2server
- Запуск клиента
./t2client <имя_клиента>
Управление
Tab
- переключение активного окна (сообщений / пользователей);↑
- прокрутить список активного окна вверх;↓
- прокрутить список активного окна вниз;Ctrl+C
- выход из программы.
Описание работы
-
Сервер создает очередь для служебных сообщений;
-
Клиент подключаается к очереди и отправляет запрос на регистрацию;
-
Сервер получает этот запрос, присваивает клиенту id, создает очередь для дальнейшей передачи информации о сообщениях и подключенных клиентах (эта очередь отдельная для каждого нового клиента) и уведомляет всех подключенных клиентов о новичке;
-
Идентификатор и дескриптор очереди отправляются клиенту;
-
Клиент, получив эту информацию, подключается к собственной очереди и читает сообщения, ранее написанные в чате, а также информацию о подключенных клиентах;
-
Последующие сообщения, отправленные клиентом, будут отправлены серверу и разосланы тем по остальным пользователям;
-
При отключении клиента, сервер уведомляет об этом остальных пользователей;
-
При завершении работы сервера вся динамическая память освобождается, а очереди удаляются.
Правильное отключение клиента и сервера обрабатывается перехватом сигнала
Ctrl + C
Демонстрация работы
-
Запустим сервер, а затем
клиента_1
.Клиент_1
пишет сообщение в чат. Затем запускаетсяклиент_2
. Он получает информацию об уже написанных сообщениях и именах всех клиентов, подключенных к чату (этоклиент_1
иклиент_2
).Клиенту_1
тем временем приходит информация о подключенииклиента_2
:Сервер тем временем логирует всю информацию.
-
Оба клиента обмениваются в чате приветственными сообщениями:
-
Клиент_1
отключается от сервера. Уклиента_2
обновляется информация о подключенных пользователях. Отключаетсяклиент_1
, вручную завершается работа сервера: