Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовая / ОС КУРСАЧ.docx
Скачиваний:
0
Добавлен:
12.02.2024
Размер:
3.77 Mб
Скачать

3. Теоретические основы разрабатываемой темы

  1. Архитектура «клиент-сервер»:

Архитектура «клиент-сервер» - это модель взаимодействия компьютерных сетей, при которой на одном конце соединения находится клиент, а на другом - сервер. Сервер предоставляет услуги или ресурсы, а клиент их запрашивает.

Плюсы:

  • Эффективность: архитектура «клиент-сервер» позволяет эффективно использовать ресурсы сервера, так как клиент может быть бездействующим, пока сервер обрабатывает запрос.

  • Масштабируемость: архитектура «клиент-сервер» легко масштабируется, так как можно добавить больше серверов для обработки запросов от большего числа клиентов.

  • Гибкость: архитектура «клиент-сервер» позволяет использовать различные протоколы и технологии для обмена данными между клиентом и сервером, что делает ее гибкой для различных приложений.

Минусы:

  • Надежность: если сервер не работает, все клиенты не смогут получить доступ к ресурсам или услугам, которые предоставляет сервер.

  • Безопасность: архитектура «клиент-сервер» может быть уязвима для атак, так как клиент может отправлять запросы на сервер, которые могут содержать вредоносный код или попытки взлома.

2. Системные средства коммуникации и синхронизации процессов

  • Сокеты. Сокет — это средство связи, позволяющее разрабатывать «клиент-сервер» системы для локального или сетевого использования.

  • Многопоточность: архитектура «клиент-сервер» позволяет обрабатывать несколько клиентских запросов одновременно, используя отдельные потоки на сервере.

  • Протоколы передачи данных: для обмена данными между клиентом и сервером используются протоколы TCP/IP, которые обеспечивают надежность и управление соединением (TCP) и маршрутизацию и доставку пакетов данных (IP).

4. Разработка и описание алгоритма работы приложения

«Клиент-сервер» система состоит из 5 файлов расширением .py: первый сервер (serverONE), второй сервер (serverTWO), клиент (client), файлы для графического изображения серверов (server_gui) и для клиента (client_gui). Первый и второй серверы имеют один и тот же HOST = "127.0.0.1", но разные порты (для сервера 1 PORT = 5400, для сервера 2 PORT = 9999). После запуска серверов, они ожидают входящее соединение.

После установления соединения клиент выбирает сервер, к которому он хочет подключиться и при этом клиент, отправляя запрос на выбранный сервер с помощью сокетов, возвращает на экран данные от выбранного сервера.

Рассмотрим теперь запросы, которые может пользователь запросить от каждого сервера:

Сервер 1:

  • Вывод имени пользователя и компьютера: Клиент, подключившись к первому серверу, получает информацию об именах от сервера.

  • Перемещение окна серверного процесса согласно переданным координатам и возвращает результат выполнения (успех/ошибка): Клиент, подключившись к первому серверу, вводит координаты X и Y, куда он хочет переместить окно процесса. В случае, если данные ввода окажутся корректурными (вводить можно только целые числа), то окно сервера будет перемещено. Иначе появится сообщение о некорректном вводе данных и окно не будет перемещаться.

Сервер 2:

  • Вывод идентификатора серверного процесса: Клиент, подключившись ко второму серверу, получает информацию о PID-е серверного процесса.

  • Вывод идентификаторов приоритетов серверного процесса: Клиент, подключившись ко второму серверу, получает информацию о PID-е потоков серверного процесса.

Рассмотрим теперь модули, функции и классы, которые были использоаны при разработке серверов и клиентов:

Модули:

Для сервера 1 и 2:

  • socket – используется для создания сетевого соединения и обмена данными между клиентами и сервером;

  • threading – применяется для организации многозадачности и обработки каждого клиента в отдельном потоке;

  • sys – позволяет управлять системными ресурсами, работать с аргументами командной строки и другими компонентами, связанными с выполнением программы;

  • os – предоставляет функционал для взаимодействия с операционной системой, например, определения приоритета процесса.

  • datetime - позволяет выполнять операции с датами и временными интервалами, форматировать дату и время, извлекать информацию о текущей дате и времени.

  • PyQt5.QtCore, PyQt5.QtWidgets - модули являются частью фреймворка PyQt5, который предоставляет возможности для создания графического пользовательского интерфейса (GUI) в приложениях Python. PyQt5.QtCore содержит основные классы и функции для работы с событиями, таймерами и потоками. PyQt5.QtWidgets предоставляет готовые виджеты для построения UI, такие как кнопки, текстовые поля, окна и диалоги. PyQt5.

  • GUI.server_gui - пользовательский модуль содержит класс Ui_MainWindow, который определяет графический интерфейс главного окна сервера приложения.

Для клиента:

  • socket – используется для создания сетевого соединения и обмена данными между клиентами и сервером;

  • threading – применяется для организации многозадачности и обработки каждого клиента в отдельном потоке;

  • sys – позволяет управлять системными ресурсами, работать с аргументами командной строки и другими компонентами, связанными с выполнением программы;

  • time - позволяет выполнять операции с датами и временными интервалами, форматировать дату и время, извлекать информацию о текущей дате и времени.

  • PyQt5.QtWidgets - модуль является частью фреймворка PyQt5, который предоставляет возможности для создания графического пользовательского интерфейса (GUI) в приложениях Python. PyQt5.QtWidgets предоставляет готовые виджеты для построения UI, такие как кнопки, текстовые поля, окна и диалоги. PyQt5.

  • GUI.client_gui - пользовательский модуль содержит класс Ui_MainWindow, который определяет графический интерфейс главного окна сервера приложения

Функции:

Для сервера 1 и 2:

  • sendToClient(answer, servSocket, addr). предназначена для обработки сообщений от клиента в отдельном потоке. Параметры функции: servSocket: сокет сервера для обмена данными с клиентом; addr: адрес клиента; window: экземпляр класса окна приложения, используемый для обновления интерфейса.

  • runServer(). Запускает сервер и принимает входящие подключения от клиентов. Она не принимает параметров.

  • threadFunc(servSocket, addr, window). Обработчик сигнала «SIGINT». Завершает работу Server 1, закрывая сокет и выходя из программы.

  • get_thread_ids(). Выводит идентификаторы потоков серверного процесса

  • get_process_id(). Выводит идентификатор серверного процесса.

Для сервера клиента:

  • Функция sendToServer(self, data, serverType) предназначена для отправки данных на сервер. Параметры функции: self: ссылка на текущий объект. data: данные, которые нужно отправить на сервер. serverType: целое число, указывающее тип сервера (0 или 1).

  • Функция runClient(serverType) предназначена для запуска клиента и установления соединения с сервером. Параметры функции: serverType: строка, указывающая тип сервера (например, "http" или "ftp").

  • receiveFunc(serverType). предназначена для получения сообщений от сервера. Параметры функции: serverType: строка, указывающая тип сервера (например, "http" или "ftp").

  • runClient(serverType) предназначена для запуска клиента и установления соединения с сервером. Параметры функции: serverType: строка, указывающая тип сервера (например, "http" или "ftp").

  • check_server(ip, port). предназначена для проверки доступности сервера по указанному IP-адресу и порту. Параметры функции: ip: IP-адрес сервера, к которому выполняется проверка доступности. port: порт сервера, к которому выполняется проверка доступности.

  • send_coords_Button() кнопка для обработки задачи по смене коррдинат серверного окна.

  • send_names_Button() кнопка для обработки задачи по выводу имени компьютера и пользователя

  • get_priority_Button() кнопка для обработки задачи по выводу PID серверного процесса.

  • get_thread_id_Button() кнопка для обработки задачи по выводу PID потоков серверного процесса.

  • addItem(self, serverType, data) предназначена для вывода текста в графический интерфейс. Параметры функции: self: ссылка на текущий объект. serverType: целое число, указывающее тип сервера (0 или 1). data: текстовая строка, которую необходимо вывести.

Соседние файлы в папке Курсовая