Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовая Пантелеева БСТ1904.docx
Скачиваний:
62
Добавлен:
04.03.2022
Размер:
460.82 Кб
Скачать

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

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

Входные данные от сервера – системные метрики, выходные – системные метрики, отправляемые клиенту.

Описание структуры программы

Для реализации задания «координаты серверного окна» используем функции Form1.Top и Form1.Left.

Для реализации задания «расширение экрана основного монитора» используем функции GetSystemMetrics(SystemMetric.SM_CXSCREEN) и GetSystemMetrics(SystemMetrics.SM_CYSCREEN).

Для реализации задания «обновление информации на клиенте происходило по инициативе сервера как реакция на изменения на сервере» создаем проверку обновлений на сервере, запуская бесконечный цикл, в котором если полученные данные не равны предыдущим, отправляем эти данные клиенту. Если же данные не изменились, то сервер ничего не отправляет клиенту. Для сравнения была создана переменная public string message= “”;

Для реализации задания «обновление информации на клиенте по таймеру, данные передается только в том случае, если что-либо изменилось с момента прошлого обновления» заводим 2 переменные внутри клиента public string ReceiveMessageA, public string ReceiveMessageB, public string ReceiveMessageC, public string ReceiveMessageD в которые записываем полученное сообщение и сравниваем с предыдущим. Запрос осуществляется по таймеру. Если сообщение не равно предыдущему, клиент получает его и выводит. Если нет, то пропускается и не выводится.

Для реализации задания «количество модулей серверного процесса» используем получение всех модулей текущего процесса, заносим в HashList с помощью module_rez.modBaseAddr и подсчитываем количество данных в нем. Затем передаем данную информацию клиенту в виде сообщения.

Для реализации задания «количество потоков серверного процесса» используем функцию GetCurrentThread для получения всех потоков текущего процесса. Мы проверяем, что данная функция считает потоки текущего процесса за счет функции GetCurrentProcessId. Затем передаем данную информацию клиенту в виде сообщения.

Результаты применения программы

На рисунках 1-3 представлены скриншоты работы программы в различных условиях.

Рисунок 1 – Результат выполнения работы приложения на основе «клиент-сервер»

Рисунок 2 – Результат работы первого сервера при подключении двух клиентов и локации с координатами 299;59

Рисунок 3 – Результат работы первого сервера при подключении двух клиентов и перемещении окна в локацию с координатами 54;912