Материал: Курсовая Рахимов Е.К. Бфи1901

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Министерство цифрового развития, связи и массовых коммуникаций

Российской Федерации

Ордена Трудового Красного Знамени федеральное государственное бюджетное образовательное учреждение высшего образования

«Московский технический университет связи и информатики»

_____________________________________________________________

Кафедра Системного программирования

КУРСОВАЯ РАБОТА

по дисциплине

ОПЕРАЦИОННЫЕ СИСТЕМЫ

на тему:

«ИССЛЕДОВАНИЕ МЕХАНИЗМОВ МЕЖПРОЦЕССНОГО ВЗАИМОДЕЙСТВИЯ»

Выполнил:

студент Рахимов Егор Константинович

(Ф.И.О.)

группа_______БФИ1901_________

Проверил:

Алексанян Диана Ашотовна - ассистент

(Ф.И.О., должность преподавателя)

Оценка_________________________

Дата ___________________________

Москва 2021

СОДЕРЖАНИЕ

ВВЕДЕНИЕ 3

1 ЗАДАНИЕ НА КУРСОВУЮ РАБОТУ 4

1.1 ДОПОЛНИТЕЛЬНЫЕ ЗАДАНИЯ 4

2 ЦЕЛЬ КУРСОВОЙ РАБОТЫ 4

3 ПОСТАНОВКА ЗАДАЧИ 4

4 ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ 4

5 РАЗРАБОТКА И ОПИСАНИЕ АЛГОРИТМА 5

6 ОПИСАНИЕ СТРУКТУРЫ ПРОГРАММЫ 6

7 РЕЗУЛЬТАТЫ ПРОГРАММЫ 6

8 ИСХОДНЫЙ КОД 8

8.1 ИСХОДНЫЙ КОД ПЕРВОГО СЕРВЕРА 8

8.1.1 Файл «Program.cs» 8

8.1.2 Файл «Form1.cs» 9

8.1.3 Файл «Server2.cs» 22

8.1.4 Файл «Server1.cs» 32

ЗАКЛЮЧЕНИЕ 39

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ 40

Введение

Клиент и сервер это программы, расположенное на разных компьютерах, в разных контроллерах и других подобных устройствах. Между собой они взаимодействуют через вычислительную сеть с помощью сетевых протоколов(TCP/IP).

Программы-серверы являются поставщиками услуг. Они постоянно ожидают запросы от программ-клиентов и предоставляют им свои услуги (передают данные, решают вычислительные задачи, управляют чем-либо и т.п.). Сервер должен быть постоянно включен и “прослушивать” сеть. Каждая программа-сервер, как правило, может выполнять запросы от нескольких программ-клиентов.

Программа-клиент является инициатором запроса, который может произвести в любой момент. В отличие от сервера клиент не должен быть постоянно включен. Достаточно подключиться в момент запроса.

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

  1. Задание на курсовую работу

Разработать многозадачное приложение, выполняющее получение, сбор и вывод системной информации в соответствии с вариантом задания (таблица 1).

Таблица 1- Индивидуальные варианты заданий

Вариант

Сервер 1

Сервер 2

получает/выполняет и возвращает в качестве результата

25

  1. название используемого видеоадаптера

  2. размер клиентской области

  1. количество свободных файлов подкачки

  2. объем используемой оперативной памяти по выбору клиента

    1. Дополнительные задания

  1. При обновлении информации на клиенте по таймеру данные передается только в том случае, если что-либо изменилось с момента прошлого обновления.

  2. Обновление информации на клиенте происходит по инициативе сервера как реакция на изменения на сервере.

  1. Цель курсовой работы

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

  1. Постановка задачи

В соответствии с заданием нужно разработать 3 отдельных приложения. Приложение-сервер должно выполнять такие функции: получение информации в соответствие с заданием, отправка данных на клиент-приложение. Приложение-клиент должно выполнять такие функции: отправка запроса серверу, получение информации и вывод ее на экран. Приложения должны быть разработаны по технологии «клиент-сервер». Метод коммуникации между процессами – сокеты.

  1. Теоретические сведения

Модели клиент-сервер - это технология взаимодействия в информационной сети. Сервер обладает правом управления тем или иным ресурсом, а клиент - пользования им. Понятия "клиент" и "сервер" описывают лишь распределение ролей при выполнении конкретной задачи, но не какие-либо отдельные виды компьютеров или программ. На одном и том же компьютере могут одновременно работать программы, выполняющие как клиентские, так и серверные функции.

Каждый конкретный сервер определяется видом того ресурса, которым он владеет. Этот принцип распространяется и на взаимодействие программ. Программа, выполняющая предоставление соответствующего набора услуг, рассматривается в качестве сервера, а программы, пользующиеся этими услугами, принято называть клиентами. Программы имеют распределенный характер, т.е. одна часть функций прикладной программы реализуется в программе-клиенте, а другая - в программе-сервере, а для их взаимодействия определяется некоторый протокол. Программа клиент взаимодействует с сервером, используя определенный протокол, устанавливающий правила обмена данными. Клиент может запрашивать с сервера какие-либо документы, манипулировать данными непосредственно на сервере, запускать на нем новые программы и т. п. Полученные от сервера данные клиент может предоставлять пользователю или формировать на их основе новый запрос. Клиент и сервер могут работать как на одном и том же компьютере, так и на разных. Во втором случае для обмена информацией между ними используется сетевое соединение.

Преимущества клиент-серверной архитектуры:

  1. делает возможным, в большинстве случаев, распределение функций вычислительной системы между несколькими независимыми компьютерами в сети;

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

  3. позволяет объединить различные клиенты. Использовать ресурсы одного сервера часто могут клиенты с разными аппаратными платформами, операционными системами и т.п.

Недостатки клиент-серверной архитектуры:

  1. неработоспособность сервера может сделать неработоспособной всю вычислительную сеть;

  2. поддержка работы данной системы требует отдельного специалиста -- системного администратора;

  3. высокая стоимость оборудования.

  1. Разработка и описание алгоритма

Для того чтобы наглядно рассмотреть процесс взаимодействия клиента и серверов, составим диаграмму компонентов и определим их роли, а также укажем связь между ними.

На рисунке 1 изображена диаграмма компонентов:

Рисунок 1 – Диаграмма компонентов

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

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

Запускаем Client.exe, Server1.exe, Server2.exe. В клиент-приложении нужно обязательно указать IP адрес устройства, на котором запущены серверы, иначе не будет установлено соединение между устройствами и не будет осуществлена передача данных. Далее выбирается сервер, который будет передавать данные. Клиент отправляет запрос с помощью сокетов и возвращает на экран данные от выбранного сервера. Также реализован запуск серверов в единственном экземпляре с помощью мьютексов, т.е. сервер может быть только один, а клиентов, обращающихся к серверу – много.

  1. Результаты программы

На рисунках 2-4 представлены результаты работы приложения. На рисунке 2 изображен функционал кнопки, а именно интерфейс. На рисунке 3 представлен результат работы 1-го сервера, а именно вывод названия видеоадаптера и размер клиента . На рисунке 4 представлен результат работы 2-го сервера, а именно вывод процента использования виртуальной и физической памяти.

Рисунок 2 – Вывод задания на курсовую работу

Рисунок 3 - Результат вывода информации с первого сервера

Рисунок 4 – Результат вывода информации с второго сервера

  1. Исходный код

    1. Исходный код первого сервера

      1. Файл «Program.Cs»

using System;

using System.Collections.Generic;

using System.Linq;

using System.Threading.Tasks;

using System.Windows.Forms;

using System.Threading;

namespace Server1

{

static class Program

{

[STAThread]

static void Main()

{

Application.EnableVisualStyles();

Application.SetCompatibleTextRenderingDefault(false);

bool onlyInstance;

Mutex mtx = new Mutex(true, "Server1", out onlyInstance);

if (onlyInstance)

Application.Run(new Form1());

else

MessageBox.Show("Приложение уже запущено", "Сообщение", MessageBoxButtons.OK, MessageBoxIcon.Stop);

mtx.ReleaseMutex();

mtx.Close();

}

}

}

      1. Файл «Form1.Cs»

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Forms;

using System.Net;

using System.Net.Sockets;

using System.Diagnostics;

using System.Threading;

namespace ClientOs

{

public partial class Form1 : Form

{

public static int port = 9305;

public static int numb = 1;

public static bool inloop = false;

public static string lastMSG = " ";

public static string forset = "";

public static string uslov = "";

public static string address = "127.0.0.1";

public Form1()

{

InitializeComponent();

}

private void button1_Click(object sender, EventArgs e)//connect 1 ser

{

ConServеtwo();

}

public void ConServеtwo()

{

address = "127.0.0.1";

port = 9305;

try

{

IPEndPoint ipPoint1 = new IPEndPoint(IPAddress.Parse(address), port);

Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

// подключаемся к удаленному хосту

socket.Connect(ipPoint1);

string message = "GetPort!" + numb;

byte[] dataBuf = Encoding.Unicode.GetBytes(message);

socket.Send(dataBuf);

// получаем ответ

dataBuf = new byte[256]; // буфер для ответа

StringBuilder strBuilder = new StringBuilder();

int bytes = 0; // количество полученных байт

do

{

bytes = socket.Receive(dataBuf, dataBuf.Length, 0);

strBuilder.Append(Encoding.Unicode.GetString(dataBuf, 0, bytes));

}

while (socket.Available > 0);

port = int.Parse(strBuilder.ToString());

// закрываем сокет

mainTextBox1.Text += "Подключение открылось на порту : " + strBuilder.ToString() + "\n";

socket.Shutdown(SocketShutdown.Both);

socket.Close();

}

catch (Exception ex)

{

mainTextBox1.Text += ex.Message + "\n";

}

}

public void viklSer2()

{

address = "127.0.0.1";

port = 9305;

try

{

IPEndPoint ipPointForFirstServ = new IPEndPoint(IPAddress.Parse(address), port);

Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

// подключаемся к удаленному хосту

socket.Connect(ipPointForFirstServ);

string message = "brkpt!" + numb;

byte[] data = Encoding.Unicode.GetBytes(message);

socket.Send(data);

// получаем ответ

data = new byte[1024]; // буфер для ответа

StringBuilder builder = new StringBuilder();

int bytes = 0; // количество полученных байт

mainTextBox1.Text += bytes;

do

{

bytes = socket.Receive(data, data.Length, 0);

mainTextBox1.Text += bytes;

builder.Append(Encoding.Unicode.GetString(data, 0, bytes));

}

while (socket.Available > 0);

mainTextBox1.Text += "Подключение завершилось на порту : "+ builder.ToString() + "\n";

// закрываем сокет

socket.Shutdown(SocketShutdown.Both);

socket.Close();

}

Источник: https://studfile.net/preview/16556744/