- •Задание на курсовую работу
- •Оглавление
- •Введение
- •Постановка задачи
- •1. Теоретические основы разрабатываемой системы
- •2. Описание алгоритма работы приложения
- •3. Описание структуры приложения
- •Основная функция клиента:
- •4. Результаты работы приложения
- •Заключение
- •Список использованной литературы
- •Приложение 1 Текст программы «server111.Cpp»
- •Основная функция сервера логирования:
- •Приложение 2 Текст программы «server222.Cpp»
- •Приложение 3 Текст программы «client.Cpp»
- •Приложение 4 Текст программы «log.Cpp»
- •Приложение 5 Текст программы «server1.Cpp»
- •Приложение 6 Текст программы «server2.Cpp»
- •Приложение 7 Текст программы «client.Cpp»
- •Приложение 8 Текст программы «clientOs.Cpp»
Постановка задачи
Основной задачей данной курсовой работы является разработка многозадачного приложения, выполняющего получение, сбор и вывод системной информации в соответствии с индивидуальным вариантом задания. Многозадачное приложение реализуется на основе технологии «клиент-сервер». Необходимо реализовать два сервера, поддерживающих многопоточность. Каждый сервер должен обрабатывать запросы клиентов, предоставляя системную информацию в соответствии с вариантом задания, и передавать её клиенту с указанием времени. Также необходимо разработать клиентскую часть с интерфейсом, позволяющим выбирать сервер для подключения, с возможностью раздельного получения и отображения данных по каждому из пунктов индивидуального задания.
1. Теоретические основы разрабатываемой системы
1. Архитектура «клиент-сервер»:
1) Суть архитектуры. Вычислительная архитектура «клиент-сервер» представляет собой модель взаимодействия между компьютерами, где один компьютер (сервер) предоставляет ресурсы или услуги, а другие компьютеры (клиенты) используют эти ресурсы или услуги. Взаимодействие между компьютерами осуществляется через передачу запросов и ответов. В контексте данной задачи сервер выполняет функцию предоставления системной информации, а клиент – получения этой информации.
2) Область применения. Вычислительная архитектура «клиент-сервер» широко применяется в распределительных системах, где требуется эффективное распределение ресурсов, управление данными и обеспечение взаимодействия между различными узлами сети. Она используется в веб-приложениях, базах данных, облачных вычислениях, играх, и во многих других областях.
3) Достоинства. Вычислительная архитектура «клиент-сервер» позволяет эффективно масштабировать системы, добавляя или убирая серверы при необходимости. Серверы контролируют доступ к ресурсам, обеспечивая эффективное управление системой. Изменения в логике или ресурсах могут быть внесены на стороне сервера без изменения клиентской части.
4) Недостатки. Вычислительная архитектура «клиент-сервер» требует обеспечения надёжности и отказоустойчивости серверов и их стабильной работы, недоступность одного сервера может негативно отразиться на работе всей системы.
2. Системные средства коммуникации и синхронизации процессов:
1) Сокеты. Сокеты представляют собой программный интерфейс для обеспечения обмена данными между процессами через сеть. Они позволяют реализовать взаимодействие между клиентом и сервером.
2) Многопоточность. Многопоточность используется для эффективной обработки нескольких клиентских запросов одновременно. Каждый клиентский запрос может быть обработан в отдельном потоке на сервере.
3) Протоколы передачи данных. Для обмена данными между клиентом и сервером используются протоколы TCP/IP. TCP отвечает за надёжность и управление соединением, в то время как IP обеспечивает маршрутизацию и доставку пакетов данных между узлами сети.
2. Описание алгоритма работы приложения
Приложение состоит из четырёх программ: лог сервера, сервера 1, сервера 2 и клиента.
Общая схема работы приложения:
Осуществляется запуск серверов.
Клиент подключается к выбранному серверу.
Клиент отправляет запросы на сервер.
Сервер обрабатывает запросы и отправляет ответы клиенту и на лог сервер.
Детальнее рассмотрим алгоритм работы каждой программы.
Сервер 1:
Инициализация:
Создается сокет для сервера.
Настраивается адрес сервера (порт 8081, принимает соединения на всех интерфейсах).
Привязывается сокет к адресу и запускается прослушивание входящих соединений.
Обработка подключений:
В бесконечном цикле сервер принимает входящие соединения от клиентов.
Для каждого нового подключения создается отдельный поток, который обрабатывает запрос клиента.
Обработка запроса клиента:
Получается количество логических процессоров на сервере.
Выполняется команда lsblk --nodeps для получения информации о жестких дисках.
Подсчитывается количество жестких дисков.
Формируется сообщение, содержащее:
Количество логических процессоров.
Информацию о жестких дисках.
Текущее время.
Сообщение отправляется клиенту.
Логирование:
Сервер отправляет сообщения о событиях (подключение клиента, обработка запроса, закрытие соединения) на сервер логирования.
Завершение работы:
После обработки запроса соединение с клиентом закрывается.
Сервер 2:
Инициализация:
Создается сокет для сервера.
Настраивается адрес сервера (порт 8082, принимает соединения на всех интерфейсах).
Привязывается сокет к адресу и запускается прослушивание входящих соединений.
Обработка подключений:
В бесконечном цикле сервер принимает входящие соединения от клиентов.
Для каждого нового подключения создается отдельный поток, который обрабатывает запрос клиента.
Обработка запроса клиента:
Сервер получает от клиента единицу измерения (байты, мегабайты или гигабайты).
С помощью функции sysinfo определяется общий и свободный объем физической памяти.
Память преобразуется в выбранную единицу измерения.
Формируется сообщение, содержащее:
Общий объем физической памяти.
Свободный объем физической памяти.
Текущее время.
Сообщение отправляется клиенту.
Логирование:
Сервер отправляет сообщения о событиях (подключение клиента, обработка запроса, закрытие соединения) на сервер логирования.
Завершение работы:
После обработки запроса соединение с клиентом закрывается.
Клиент:
Выбор сервера:
Пользователь выбирает, к какому серверу задач подключиться:
Сервер 1 (порт 8081).
Сервер 2 (порт 8082).
Подключение к серверу:
Создается сокет для подключения.
Настраивается адрес сервера (IP-адрес 127.0.0.1 и выбранный порт).
Устанавливается соединение с сервером.
Отправка данных:
Если выбран сервер 2, пользователь вводит единицу измерения (байты, мегабайты или гигабайты), которая отправляется серверу.
Получение ответа:
Клиент получает ответ от сервера задач и выводит его на экран.
Завершение работы:
Сокет закрывается, и клиент завершает работу.
Сервер логирования:
Инициализация:
Создается сокет для сервера логирования.
Настраивается адрес сервера (порт 9000, принимает соединения на всех интерфейсах).
Привязывается сокет к адресу и запускается прослушивание входящих соединений.
Обработка подключений:
В бесконечном цикле сервер принимает входящие соединения от серверов задач.
Для каждого нового подключения создается отдельный поток, который обрабатывает сообщения от подключенного сервера.
Обработка сообщений:
Поток принимает сообщения от сервера задач через сокет.
Каждое сообщение записывается в файл server.log с указанием текущего времени.
Если соединение с сервером задач закрывается, поток завершает свою работу.
Завершение работы:
Сервер логирования продолжает работать в бесконечном цикле, пока не будет принудительно остановлен.
