- •«Московский технический университет связи и информатики»
- •Задание на курсовую работу
- •Содержание
- •Введение
- •Постановка задачи
- •3. Теоретические основы разрабатываемой темы
- •4. Разработка и описание алгоритма работы приложения
- •5. Результат работы программы
- •6. Заключение
- •Список использованных источников
- •Приложения
3. Теоретические основы разрабатываемой темы
Архитектура «клиент-сервер»:
Архитектура «клиент-сервер» - это модель взаимодействия компьютерных сетей, при которой на одном конце соединения находится клиент, а на другом - сервер. Сервер предоставляет услуги или ресурсы, а клиент их запрашивает.
Плюсы:
Эффективность: архитектура «клиент-сервер» позволяет эффективно использовать ресурсы сервера, так как клиент может быть бездействующим, пока сервер обрабатывает запрос.
Масштабируемость: архитектура «клиент-сервер» легко масштабируется, так как можно добавить больше серверов для обработки запросов от большего числа клиентов.
Гибкость: архитектура «клиент-сервер» позволяет использовать различные протоколы и технологии для обмена данными между клиентом и сервером, что делает ее гибкой для различных приложений.
Минусы:
Надежность: если сервер не работает, все клиенты не смогут получить доступ к ресурсам или услугам, которые предоставляет сервер.
Безопасность: архитектура «клиент-сервер» может быть уязвима для атак, так как клиент может отправлять запросы на сервер, которые могут содержать вредоносный код или попытки взлома.
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: текстовая строка, которую необходимо вывести.