Главная страница
Навигация по странице:

  • Цель работы

  • Листинг программы: Клиент

  • Сервер

  • Сообщения серверу (стоп слова)

  • создать клиент-серверное приложение «Библиотека». Операционные системы Лабораторная. Лабораторная работа 2 по дисциплине Операционные системы Лабораторная работа 2 Ф. И. О


    Скачать 450.99 Kb.
    НазваниеЛабораторная работа 2 по дисциплине Операционные системы Лабораторная работа 2 Ф. И. О
    Анкорсоздать клиент-серверное приложение «Библиотека
    Дата27.04.2022
    Размер450.99 Kb.
    Формат файлаdocx
    Имя файлаОперационные системы Лабораторная.docx
    ТипЛабораторная работа
    #501292

    Лабораторная работа №2

    по дисциплине: «Операционные системы»



    Лабораторная работа №2



    Ф.И.О.




    Группа




    Преподаватель




    Дата сдачи




    Цель работы: создать клиент-серверное приложение «Библиотека».

    Алгоритм программы:

    Запускается приложение, имеющее клиентскую и серверную части, которые являются отдельными программами. Клиентская часть при запуске порождает серверную как новый процесс. Клиентская часть берет на себя работу с интерфейсом пользователя, серверная – работу с файлами и обработку информации. Сервер осуществляет хранение информации. Информация о записях сохраняться в файл *.csv. Между собой клиентская и серверная части взаимодействуют через именованный канал.

    Окно клиента отображает 4 поля для записи: имя автора, название книги, год издания и издательство. Так же в окне 2 кнопки : отправить (данные) на сервер и остановить сервер.

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

    Листинг программы:

    Клиент:

    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.Diagnostics;

    using StopWordsModel;

    using System.IO;

    using System.IO.Pipes;
    namespace ClientServerApp

    {

    public partial class Form1 : Form

    {

    private NamedPipeClientStream _pipeClientStream;

    private StreamWriter _streamWriter;

    private string _bookAuthor;

    private string _bookName;

    private string _bookYear;

    private string _bookPublisher;

    private Process _process;
    public Form1()

    {

    InitializeComponent();

    // Запуск сервера

    StartServer();

    }

    private void StartServer()

    {

    _process = Process.Start("Server");

    //Создание именованного канала

    _pipeClientStream = new NamedPipeClientStream(NameOptions.PipeName);

    // и подключение к нему

    _pipeClientStream.Connect();

    _streamWriter = new StreamWriter(_pipeClientStream) { AutoFlush = true };

    }
    // Отправка данных на сервер

    private void ButtonSend_Click(object sender, EventArgs e)

    {

    if (_process.HasExited)

    {

    if (MessageBox.Show(text: "Сервер остановлен. Запустить?",

    caption: "О как. А сервер остановлен",

    MessageBoxButtons.OKCancel) == DialogResult.OK)

    {

    StartServer();

    }

    else

    {

    return;

    }

    }

    _streamWriter.WriteLine(MessagesServer.StartServerMessage);

    _streamWriter.WriteLine(_bookAuthor);

    _streamWriter.WriteLine(_bookName);

    _streamWriter.WriteLine(_bookYear);

    _streamWriter.WriteLine(_bookPublisher);

    _streamWriter.WriteLine(MessagesServer.FinishServerMessage);

    MessageBox.Show("Книга записана");

    }
    private void TextBoxName_TextChanged(object sender, EventArgs e)

    {

    _bookAuthor = ((TextBox)sender).Text;

    }
    private void TextBoxBook_TextChanged(object sender, EventArgs e)

    {

    _bookName = ((TextBox)sender).Text;

    }
    private void TextBoxYear_TextChanged(object sender, EventArgs e)

    {

    _bookYear = ((TextBox)sender).Text;

    }
    private void TextBoxPublisher_TextChanged(object sender, EventArgs e)

    {

    _bookPublisher = ((TextBox)sender).Text;

    }
    //Кнопка остановки сервера

    private void ButtonStopServer_Click(object sender, EventArgs e)

    {

    _streamWriter.WriteLine(MessagesServer.ServerStopMessage);

    MessageBox.Show("Сервер остановлен!");

    }

    }

    }

    Сервер:

    using System;

    using System.Collections.Generic;

    using System.Linq;

    using System.Text;

    using System.Threading.Tasks;

    using System.IO.Pipes;

    using System.IO;

    using StopWordsModel;

    namespace Server

    {

    class Program

    {

    static void Main(string[] args)

    {

    Console.WriteLine("Сервер запущен");

    //Создание именованного канала

    using (var serverStream = new NamedPipeServerStream(NameOptions.PipeName, PipeDirection.InOut))

    {

    //Ожидание подключения клиента

    serverStream.WaitForConnection();

    Console.WriteLine("Соединение установлено");

    using (StreamReader sr = new StreamReader(serverStream))

    {

    //считваем строки

    string tmp;

    // Если сервер не запущен или остановлен, то выводим сообщение

    while((tmp = sr.ReadLine()) != MessagesServer.ServerStopMessage)

    {

    if(tmp == MessagesServer.StartServerMessage)

    {

    string bookAuthor = sr.ReadLine();

    string bookName = sr.ReadLine();

    string bookYear = sr.ReadLine();

    string bookPublisher = sr.ReadLine();

    string finishServer = sr.ReadLine();

    //Если все строки считаны

    if (finishServer == MessagesServer.FinishServerMessage)

    {

    // Создаем файл для записи данных

    using (var fs = new FileStream(AppDomain.CurrentDomain.BaseDirectory +

    "library.csv", FileMode.Append, FileAccess.Write))

    {

    using (StreamWriter sw = new StreamWriter(fs))

    {

    //Запись информации в файл

    sw.WriteLine($"Имя автора: {bookAuthor}; Название книги: {bookName};" +

    $" Год издания: {bookYear}; Издательство: {bookPublisher};");

    Console.WriteLine($"Книга '{bookName}' записана");

    }

    }

    }

    }

    }

    }

    }

    Console.WriteLine("Сервер остановлен");

    }

    }

    }

    Сообщения серверу (стоп слова):

    using System;
    namespace StopWordsModel

    {

    public class MessagesServer

    {

    // Остановка сервера

    public static string ServerStopMessage { get; } = "stop";

    //Запуск сервера

    public static string StartServerMessage { get; } = "start";
    //отправка информации на сервер

    public static string FinishServerMessage { get; } = "finish";

    }

    }

    Имя каналов:

    using System;

    using System.Collections.Generic;

    using System.Text;
    namespace StopWordsModel

    {

    public static class NameOptions

    {

    public static string PipeName { get; } = "MyPipe";

    }

    }

    Внешний вид графического интерфейса клиента



    Внешний вид интерфейса сервера



    написать администратору сайта