курсовая разработка ИС. Умаров. Разработка системы мгновенного обмена сообщениями
Скачать 338.64 Kb.
|
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ ЧЕЧЕНСКОЙ РЕСПУБЛИКИ Государственное бюджетное профессиональное образовательное учреждение «Грозненский государственный колледж информационных технологий» (ГБПОУ «ГГКИТ») Кафедра: «Информационных технологий и связи» КУРСОВОЙ ПРОЕКТ по МДК 01.01 Разработка программных модулей на тему: «Разработка системы мгновенного обмена сообщениями» Работу выполнил студент группы: И1.19-41 специальности 09.02.07 Информационные системы и программирование Умаров Заур Идалович (Ф.И.О. полностью) Руководитель: преподаватель первой категории, Улхаева Х. М. (должность, Ф.И.О.) Оценка___________________ (прописью) Преподаватель, подпись: _________________________ (подпись/И.О. Фамилия) г. Грозный 2022 г СОДЕРЖАНИЕ ВВЕДЕНИЕАктуальность темы данного курсовго проектирования обусловлена тем, что общение – одна из основных потребностей людей и обмен информацией является неотъемлемой частью формирования и развития личности. Для людей всегда важно иметь возможность общаться с другими людьми, передавать и получать различную информацию. На сегодняшний день компьютерные технологии проникают во все сферы человеческой деятельности. Становится сложно представить жизнь без них, так как они помогают хранить, обрабатывать, получать и распространять информацию, не взирая на расстояние. Поэтому было принято решение создать приложение, которое позволяет общаться людям через интернет. Чат, чаттер (англ. chatter – болтать) – средство обмена сообщениями по компьютерной сети в режиме реального времени, а также программное обеспечение, позволяющее организовывать такое общение. Характерной особенностью является коммуникация именно в реальном времени или близкая к этому, что отличает чат от форумов и других «медленных» средств. Передача сообщений в режиме реального времени и есть главная особенность и преимущество чатов. Несмотря на бурный рост информационной индустрии, тема текстовых чатов всё ещё не потеряла своей актуальности и их часто используют на предприятиях или офисах, когда важно быстро получать или отправлять важную информацию. Целью данного проектирования является создание программного обеспечения для обмена сообщениями между пользователями в виде, характерном для конкретной предметной области. Для достижения поставленной цели необходимо решить следующие задачи: 1. Изучить предметную область; 2. Провести анализ существующих систем мгновенного обмена сообщениями; 3. Разработать программное обеспечение. Для разработки программного обеспечения необходимо: Провести анализ подходов к работе с данными в серверных приложениях; Провести анализ требований, предъявляемых к данному программному обеспечению; Разработать архитектуру будущего программного обеспечения; Написать код по разработанной архитектуре. В данном курсовом проекте, будет разработана программа клиент-серверного чата, с возможность общения нескольких человек одновременно (all2all) в локальной сети. Раздел 1. ТЕОРЕТИЧЕСКИЙ АНАЛИЗ И ПРОЕКТИРОВАНИЕ1.1 Постановка задачи. Функции системыЗадачей данного курсового проектирования является создание клиент-серверного чата, состоящего из двух отдельных программ: сервер и клиент. Сервером является программа, к которой подключаются клиенты. Сервер принимает, отправляет и обрабатывает запросы, которые поступают от клиентской программы. К серверу может подключиться множество клиентов. Функции сервера: Выбор порта для работы. Подключение клиентов. Ведение списка всех подключённых клиентов. Пересылка сообщений (Общих или приватных). Функции администрирования клиентов (удаление, изменение имени, сообщение от имени администратора). Ведение лога (история работы сервера). Принятие и пересылка файлов. Функции клиента: Подключение к серверу, используя IP адрес и порт сервера. Выбор имени (Nickname) под которым вас будут видеть остальные участники чата. Отправка сообщений всем подключённым клиентам. Отправка приватного сообщения. Список всех клиентов сервера (получает от сервера). Возможность отправить файл. 1.2 Архитектура системыМною выбрана одноуровневая клиент-серверная архитектура. Архитектура клиент-сервер применяется в большом числе сетевых технологий, используемых для доступа к различным сетевым сервисам: Web-серверы. Серверы приложений. Серверы баз данных. Файл-серверы. Прокси-сервер. Файрволы (брандмауэры). Почтовые серверы. Преимущества: Отсутствие дублирования кода программы-сервера программами-клиентами. Так как все вычисления выполняются на сервере, то требования к компьютерам, на которых установлен клиент, снижаются. Все данные хранятся на сервере, который, как правило, защищён гораздо лучше большинства клиентов. На сервере проще обеспечить контроль полномочий, чтобы разрешать доступ к данным только клиентам с соответствующими правами доступа. Позволяет объединить различные клиенты. Использовать ресурсы одного сервера часто могут клиенты с разными аппаратными платформами, операционными системами и т.п. Позволяет разгрузить сети за счёт того, что между сервером и клиентом передаются небольшие порции данных. 1.3 Протокол. Описание протокола взаимодействияТак как данная работа заключается в создании простого чата без специальных функция, то было решено что, намного проще будет написать свой собственный протокол взаимодействия сервера и клиента, так как существующие уже протоколы сложны в освоении и имеют множество функций которые мне не понадобятся в моей работе. Собственный протокол будет использовать текст для обмена, в отличии от бинарного протокола обмена, текстовый намного проще в освоении и т. к моей задачей является создание системы обмена мгновенными сообщениями, то очевидно что, текстовый протокол является наилучшим выбором. Выбор протокола транспортного уровня пал на протокол TCP/IP, по следующим причинам: TCP/IP сокеты используются для реализации надежных поточных соединений между компьютерами в сети Internet. Соединение с использованием TCP/IP сокетов является постоянным и определяется в двух направлениях. C помощью TCP/IP сокетов можно программировать подключение систем ввода/вывода к программам, расположенным на любом компьютере в сети. Помимо этого TCP/IP сокеты позволяют реализовать подключение и к локальной машине. Зачастую на практике для соединения по TCP/IP сокетам на компьютерах открываются определенные порты, что позволяет расширить и разграничить канал подключения компьютера. Всё взаимодействие сервера и клиента будет заключаться в специальных командах посылаемых друг другу в виде текстовых строк. Вначале каждой команды стоит знак #, после идёт сама команда, а после команды параметры присущи этой команде, в общем виде это выглядит так: #<Команда> [<параметр1>{; <параметр1>}] Полный список Специальных команд сервера и клиента, представлен ниже в таблице 1 и 2. Таблица 1. Команды сервера
Особенности: При получении сообщения, неважно общее оно или приватное, сервер рассылает его всем подключённым к нему клиентам, но принимает это сообщение только клиент, чьё имя совпадает с именем получателя, в случае с приватным сообщением. При получении, какого либо файла сервер сохраняет файл во временной папке и после этого рассылает файл всем подключённым клиентам. (Файлы в папке хранятся до выключения программы) Значение приватности не работает при пересылке файла. Команды клиента Таблица 2. Команды клиента
Особенности: Так же как и у сервера у клиента есть временная папка, которая очищается после закрытия программы. При отправки клиентом файла сначала отправляется команда для создания файла, потом создаётся файл для отправки (файл записывается в переменную), и после отправляется на сервер. Сообщение от администратора появляется не в общем чате а в всплывающем окне. 1.4 Взаимодействие клиента и сервераПредположим что сервер запушен и нормально функционирует, рассмотрим типичные ситуации работы в сети: 1. Подключение клиента: Клиент подключается к серверу зная его адрес и порт. Сервер обнаружив новое соединение, отправляет на все соединения строку ‘#N’ (Запрос имени клиента). Все подключенные клиенты в том числе и только что подключенный, получив запрос сервера отправляют на сервер строку ‘#Nимя’, где «имя» это имя клиента. Сервер получив такую строку добавляет «имя» в список клиентов. 2. Отключение клиента: Отключение может произойти по разным причинам: клиент сам отключился, клиента отключил администратор, из-за сбоя работы сервера или клиента. Отключившись клиент просто прерывает связь с сервером. Сервер заметив что кто то отключился, запрашивает у оставшихся подключений их имена послав строку ‘#N’ (Запрос имени клиента). Все подключенные клиенты, получив запрос сервера отправляют на сервер строку ‘#Nимя’, где «имя» это имя клиента. Сервер получив такую строку добавляет «имя» в список клиентов. Если инициатива отключения исходит от администратора: Сервер посылает строку ‘#Dимя’ всем подключенным клиентам, где «имя» это имя клиента который должен отключиться. Клиент узнав своё имя отключается от сервера Если произошёл сбой работы сервера: Клиент поняв что сервер не отвечает, разрывает соединение с неактивным сервером. Если произошёл сбой работы клиента, то процедура отключения ничем не отличается от обычной. 3. Отправка общего сообщения: Клиент посылает на сервер строку ’ #M сообщение’, где сообщение это текст который клиент хочет чтобы видели все участники чата. Сервер получив эту строку не изменяя её, просто рассылает её всем клиентам включая отправителя. Клиенты получив эту строку отображают ‘сообщение’ в компонент отображения. 4. Отправка приватного сообщения: Клиент c именем ‘имя1’ посылает на сервер строку ’ #Pимя1; имя2; сообщение’, где ‘сообщение’ это текст который клиент хочет отправить клиенту с именем ‘имя2’, ‘; ’ – это разделитель. Сервер получив эту строку не изменяя её, просто рассылает её всем клиентам включая отправителя. Клиент получив эту строку, определив что он получатель отображают ‘сообщение’ в компонент отображения, все же остальные пропускают строку. 5. Отправка Файла: Клиент посылает на сервер строку ‘#F имя файла’ сервер создаёт файл с именем ‘имя файла’. Клиент посылает файл. Клиент посылает строку ‘#S имя файла’’, что означает что клиент хочет отправить файл c именем ‘имя файла’, который уже находится на сервере всем остальным клиентам. Сервер рассылает всем подключенным клиентам строку ‘#F имя файла’. Клиенты создают файл. Сервер посылает файл. Раздел 2. ПРОГРАММНАЯ РЕАЛИЗАЦИЯДля реализации программ используется интегрированная среда разработки Visual Studio и её стандартные компоненты. Система программирования Visual Studio рассчитана на программирование различных приложений и предоставляет большое количество компонентов для этого. К тому же работодателей интересует, прежде всего, скорость и качество создания программ, а эти характеристики может обеспечить только среда визуального проектирования, способная взять на себя значительные объемы рутинной работы по подготовке приложений. Возможности Visual Studio полностью отвечают подобным требованиям и подходят для создания системы обмена мгновенными сообщениями. 2.1 Используемые компонентыКак уже было сказано выше все используемые компоненты идут в стандартной версии Visual Studio 2019, но не все они по умолчанию доступны. Основные компоненты которые будут отвечать за передачу данных по сети, нужно включить, чтобы это сделать следует проделать следующие действия: Запустить Visual Studio. На верхней панели выбрать вкладку Component => Install Packages => Add Найти файл «dclsockets7. bpl» в папке bin c установленной Visual Studio Теперь нужные компоненты будут доступны в программе. Используемые компоненты для реализации сетевого взаимодействия: TServerSocket \\Компонент серверной части TClientSocket \\Компонент клиентской части Эта пара компонентов ServerSocket и ClientSocket нужны для работы программ по сети. По моему личному мнению эти компоненты куда лучше подходят для реализации данной работы, они являются более простыми для освоения, хотя эти компоненты и не являются рекомендуемыми я считаю что изучать сетевое взаимодействие в Visual Studio нужно именно с них, и так как я являюсь новичком в этой области программирования, то эти компоненты как никак кстати подойдут для начала освоения программирования сетевых программ и взаимодействия в сети. 2.2 Описание свойств и методовОписание TServerSocket. Свойства Socket – класс TServerWinSocket, через который имеется доступ к открытым сокетным каналам. Далее рассмотрим это свойство более подробно, т.к. оно, собственно и есть одно из главных. Тип: TServerWinSocket; ServerType – тип сервера. Может принимать одно из двух значений: stNonBlocking – синхронная работа с клиентскими сокетами. При таком типе сервера можно работать с клиентами через события OnClientRead и OnClientWrite. stThreadBlocking – асинхронный тип. Для каждого клиентского сокетного канала создается отдельный процесс (Thread). Тип: TServerType; ThreadCacheSize – количество клиентских процессов (Thread), которые будут кэшироваться сервером. Здесь необходимо подбирать среднее значение в зависимости от загруженности Вашего сервера. Кэширование происходит для того, чтобы не создавать каждый раз отдельный процесс и не убивать закрытый сокет, а оставить их для дальнейшего использования. Тип: Integer; Active – показатель того, активен в данных момент сервер, или нет. Т.е., фактически, значение True указывает на то, что сервер работает и готов к приему клиентов, а False – сервер выключен. Чтобы запустить сервер, нужно просто присвоить этому свойству значение True. Тип: Boolean; Port – номер порта для установления соединений с клиентами. Порт у сервера и у клиентов должны быть одинаковыми. Рекомендуются значения от 1025 до 65535, т.к. от 1 до 1024 – могут быть заняты системой. Тип: Integer; Service – строка, определяющая службу (ftp, http, pop, и т.д.), порт которой будет использован. Это своеобразный справочник соответствия номеров портов различным стандартным протоколам. Методы Open – Запускает сервер. По сути, эта команда идентична присвоению значенияTrue свойству Active; Close – Останавливает сервер. По сути, эта команда идентична присвоению значенияFalse свойству Active. События OnClientConnect – возникает, когда клиент установил сокетное соединение и ждет ответа сервера (OnAccept); OnClientDisconnect – возникает, когда клиент отсоединился от сокетного канала; OnClientError – возникает, когда текущая операция завершилась неудачно, т.е. произошла ошибка; OnClientRead – возникает, когда клиент передал берверу какие–либо данные. Доступ к этим данным можно получить через пеаедаваемый параметр Socket: TCustomWinSocket; OnClientWrite – возникает, когда сервер может отправлять данные клиенту по сокету; OnGetSocket – в обработчике этого события Вы можете отредактировать параметр ClientSocket; OnGetThread – в обработчике этого события Вы можете определить уникальный процесс (Thread) для каждого отдельного клиентского канала, присвоив параметру SocketThread нужную подзадачу TServerClientThread; OnThreadStart, OnThreadEnd – возникает, когда подзадача (процесс, Thread) запускается или останавливается, соответственно; OnAccept – возникает, когда сервер принимает клиента или отказывает ему в соединении; OnListen – возникает, когда сервер переходит в режим ожидания подсоединения клиентов. Описание TClientSocket. Свойства Active – показывает, открыт сокет или нет. Тип: Boolean. Соответственно, True – открыт, а False – закрыт. Это свойство доступно для записи; Host – строка (Тип: string), указывающая на хост–имя компьютера, к которому следует подключиться; Address – строка (Тип: string), указывающая на IP–адрес компьютера, к которому следует подключиться. В отличие от Host, здесь может содержаться лишь IP. Отличие в том, что если указать в Host символьное имя компьютера, то IP адрес, соответствующий этому имени будет запрошен у DNS; Port – номер порта (Тип: Integer (Word)), к которому следует подключиться. Допустимые значения – от 1 до 65535; Service – строка (Тип: string), определяющая службу (ftp, http, pop, и т.д.), к порту которой произойдет подключение. Это своеобразный справочник соответствия номеров портов различным стандартным протоколам; ClientType – тип соединения. ctNonBlocking – асинхронная передача данных, т.е. посылать и принимать данные по сокету можно одновременно с помощью OnRead и OnWrite; ctBlocking – синхронная передача данных. События OnRead и OnWrite не работают. Этот тип соединения полезен для организации обмена данными с помощью потоков (т.е. работа с сокетом как с файлом). Методы Open – открытие сокета (аналогично присвоению значения True свойству Active); Close – закрытие сокета (аналогично присвоению значения False свойству Active). События OnConnect – как следует из названия, это событие возникает при установлении соединения. Т.е. в обработчике этого события уже можно начинать авторизацию или прием/передачу данных; OnConnecting – возникает при установлении соединения. Отличие от OnConnect в том, что соединение еще не установлено. Обычно такие промежуточные события используются для обновления статуса; OnDisconnect – возникает при закрытии сокета. Причем, закрытия как из Вашей программы, так и со строноны удаленного компьютера (либо из–за сбоя); OnError – продолжает грустную тему предыдущего события:). Возникает при ошибке в работе сокета. Следует отметить, что это событие не поможет отловить ошибку в момент открытия сокета (Open). Для того, чтобы избежать выдачи виндозного сообщения об ошибке, надо заключить операторы открытия сокета в блок try. except (обработка исключительных ситуаций); OnLookup – возникает при попытке получения от DNS IP–адреса указанного хоста; OnRead – возникает, когда удаленный компьютер послал Вам какие–либо данные. При возникновении этого события возможна обработка данных; OnWrite – возникает, когда разрешена запись данных в сокет. 2.3 Исходный код Сервера отвечающий за сетевое взаимодействие// К серверу подключился клиент (OnClientConnect) var i: Integer; {Кто-то присоединился или отсоединился? Запрашиваем у всех юзеров их имена}. Items. Clear;i: = 0 to ServerSocket1. Socket. ActiveConnections-1 do. Socket. Connections [i]. SendText ('#N');. Lines. Add (timetostr (now) +': '+'Пользователь подключился. В сети: '+inttostr (ServerSocket1. Socket. ActiveConnections)); // От сервера отключился клиент (OnClientDisconnect) var i: Integer; {Кто-то присоединился или отсоединился? Нет проблем! Запрашиваем у всех юзеров их имена}. Items. Clear;i: = 0 to ServerSocket1. Socket. ActiveConnections-1 do. Socket. Connections [i]. SendText ('#N');. Lines. Add (timetostr (now) +': '+'Пользователь отключился. В сети: '+inttostr (ServerSocket1. Socket. ActiveConnections)); // Сервер получает данные от клиента (OnClientRead) var s,s1: string;: Integer;: Integer;: Pointer;: string;: string; {сохраняем в s присланную нам строку}: = Socket. ReceiveText; {Если кто-то шлёт файл}Copy (s,1,2) = '#F' then(s,1,2);: =s; {Процедура создания файла}_create (filename);;; {Кто-то хочет переслать всем файл}Copy (s,1,2) = '#S' then(s,1,2);. Destroy;i: = 0 to ServerSocket1. Socket. ActiveConnections-1 do. Socket. Connections [i]. SendText ('#F'+s);. Socket. Connections [i]. SendStream (TFileStream. Create ('temp/'+s, fmOpenReadWrite or fmShareDenyWrite));;;; {кто-то шлёт своё имя}Copy (s,1,2) = '#N' then(s,1,2); {Добавляем его в юзер лист}. Items. Add (s); {Записываем в s команду для посылки нового списка юзеров}: = '#U';i: = 0 to ListBox1. Items. Count-1 do: = s+ListBox1. Items [i] +'; '; {. и рассылаем этот список всем клиентам}i: = 0 to ServerSocket1. Socket. ActiveConnections-1 do. Socket. Connections [i]. SendText (s);;; {Если кто-то кинул сообщение - рассылаем его всем клиентам}(Copy (s,1,2) = '#M') or (Copy (s,1,2) = '#P') then begini: = 0 to ServerSocket1. Socket. ActiveConnections-1 do. Socket. Connections [i]. SendText (s);;;; // Получение файла (Файловый сервер) var s,s1: string;: Integer;: Integer;: Pointer;: = Socket. ReceiveLength;(Bfr, iLen);. ReceiveBuf (Bfr^, iLen);. Write (Bfr^, iLen);(Bfr);;;. 2.4 Исходный код Клиента отвечающий за сетевое взаимодействие// Кнопка подключения к серверу var,port: string; {Проверка введены ли данные (ip,port,nickname) }(edit2. Text='') or (edit3. Text='') or (edit4. Text='') then. Panels [0]. Text: ='Заполните все поля' {Если уже есть подключение}ClientSocket1. Active then: =edit2. Text;: =edit3. Text;: =edit4. Text;. Host: =host;. port: =strtoint (port);. Open;. Host: =ClientSocket1. host;. port: =ClientSocket1. port+50;. Open; {Если нет подключение}. Close;. Close;: =edit2. Text;: =edit3. Text;: =edit4. Text;. Host: = host;. Port: = StrToInt (port);: =edit4. Text;. Open;. Host: =ClientSocket1. host;. port: =ClientSocket1. port+50;. Open;;; // Кнопка отключения от сервера Begin {Закрытие подключения}. Close;. Close;; // Команды от сервера var s,from_,to_: string;: integer; {присваиваем s полученную от сервера строку}: = Socket. ReceiveText;Copy (s,1,2) = '#F' then(s,1,2);: = TFileStream. Create ('temp\'+s, fmCreate or fmShareDenyWrite);;; {Если сервер посылает нам Новый Ник}Copy (s,1,2) = '#K' then begin(s,1,2);copy (s,1,pos ('; ',s) - 1) =NickName then begin(s,1,pos ('; ',s));('Администратор изменил ваше имя на: - '+S);. Text: =S;. Click;. Click;;;;; {Если сервер посылает нам User List}Copy (s,1,2) = '#U' then begin(s,1,2);: =0; {Чистим ListBox1}. Items. Clear; {Добавляем по одному юзеру в список. Имена юзеров разделены знаком «; «}Pos ('; ',s) > 0 do begin. Items. Add (Copy (s,1,Pos ('; ',s) - 1));(s,1,Pos ('; ',s));;;; {Если нам прислали общее сообщение (видимое для всех юзеров) }Copy (s,1,2) = '#M' then begin(s,1,2); {Добавляем его в Memo1}. Lines. Insert (0,Copy (s,1,Pos ('; ',s) - 1) +'> '+ Copy (s,Pos ('; ',s) +1,Length (s) - Pos ('; ',s)));;; {Если нам прислали запрос на наше имя юзера}Copy (s,1,2) = '#N' then begin {Посылаем ответ}. SendText ('#N'+nickname);;; {Если нам прислали приватное сообщение (или не нам:)) }Copy (s,1,2) = '#P' then begin(s,1,2); {Выделяем в to_ - кому оно предназначено}_: = Copy (s,1,Pos ('; ',s) - 1);(s,1,Pos ('; ',s)); {Выделяем в from_ - кем отправлено}_: = Copy (s,1,Pos ('; ',s) - 1);(s,1,Pos ('; ',s)); {Если оно для нас, или написано нами - добавляем в Memo1 (иногда полезно убрать этот оператор if:)) }(to_ = nickname) or (from_ = nickname) then. Lines. Insert (0,from_+' (private) > '+s);. SelStart: =0;. SelLength: =RichEdit1. Lines [1]. Length;. selAttributes. Color: = clred;;;;Copy (s,1,2) = '#D' then begin(s,1,2);s=nickname then begin. Click;('Вы отключены Администратором');;;;Copy (s,1,2) = '#A' then begin(s,1,2);copy (s,1,pos ('; ',s) - 1) =NickName then begin(s,1,pos ('; ',s));('Администратор: - '+S);;;;;; // Получение файла var s,s1: string;: Integer;: Integer;: Pointer;: = Socket. ReceiveLength;(Bfr, iLen);. ReceiveBuf (Bfr^, iLen);. Write (Bfr^, iLen);(Bfr);;; // Отправка сообщения var s: string;(CheckBox1. Checked) and (ListBox1. ItemIndex < 0) then begin('Чтобы послать приватное сообшение, сначала выберите получателя! ');;; {Если это приватное сообщение}CheckBox1. Checked=true then: = '#P'+ListBox1. Items [ListBox1. ItemIndex] +'; ' {добавляем спец. команду и адресат}{А если не очень приватное? }: = '#M'; {Просто спец. команду} {Добавляем наше имя (от кого) и само сообщение}: = s+nickname+'; '+Edit1. Text; {Посылаем все это добро по сокету}. Socket. SendText (s); {И снова ждем ввода в уже чистом TEdit-е}. Text: = '';: = Edit1;; // Отправка файла begin. Free;. Execute;. Socket. SendText ('#F'+ExtractFileName (opendialog1. FileName));. Socket. SendStream (TFileStream. Create (opendialog1. FileName, fmOpenReadWrite or fmShareDenyWrite));. Socket. SendText ('#S'+ExtractFileName (opendialog1. FileName));. Free; 2.5 Порядок работы с программойРабота с сервером Рисунок 1 – Настройки сервера Настройки сервера. Главной настройкой является поле «Порт» по умолчанию стоит порт «1010». Сервер можно запустить нажав на кнопку «Запуск», если порт свободен и нет больше никаких проблем то в строке состояния отобразится надпись «Сервер запушен», теперь клиенты могут подключаться к серверу. Отключение сервера происходит нажатием кнопкой «Отключить». Есть возможность свернуть сервер в трэй, нажатием кнопки «Свернуть в трэй». Рисунок 2 – Лог чата Лог чата. Это история сервера, в ней ведутся записи о подключении и отключении пользователей, времени запуска и отключении сервера. Кнопка «Сохранить», сохраняет историю в выбранный текстовый файл. Кнопка «Очистить», очищает историю. Эта закладка со списком подключенных клиентов. Кнопки: Отключить – отключает выбранного пользователя от сервера. Сообщение – посылает выбранному пользователю сообщение от администратора сервера. Рисунок 3 – Пользователи Кнопка Сменить ник – изменяет имя клиента в чате на новое введённое администратором. Работа с клиентом Закладка «Чат». Закладка на которой и происходит переписка между клиентами. Для того чтобы отослать сообщение нужно написать текст в поле с надписью «Текст сообщения» и нажать кнопку «Send». В том случае если нужно послать сообщение только одному клиенту нужно поставить галочку «ПРИВАТНОЕ» и выбрать получателя из списка. Для того чтобы послать файл нужно нажать кнопку «…», файл будет разослан всем клиентам вне зависимости от приватности. Рисунок 4 – Чат Подключение и Настройки. Как видно из названия в этой закладке происходит подключение к серверу и настройка клиента. «IP» – адрес сервера к которому нужно подключится, для подключения к серверу который включен на том же компьютере что и клиент в поле «ip» пишется «LocalHost». «Порт» - порт использует сервер «NickName» – имя клиента которое будет отображено остальным клиентам. Рисунок 5 – Подключение и настройки Кнопка «Подключится» подключается к серверу с заданными параметрами, а кнопка «Отключится» соответственно отключается от подключенного сервера. 2.6 Тестирование системыВ ходе тестирования, сервер и клиент проверялись по локальной сети на 3х компьютерах, на двух компьютерах было запущена клиентская часть, а на третьем Сервер и Клиент одновременно, в ходе проверок клиент и сервер интенсивно проверялись на ошибки и исключительные ситуации. Все задачи Клиент-сервер выполняет хорошо, но были выявлены некоторые проблемы с передачей файлов. Существуют некоторые проблемы при передачи файлов, например если передать файл два раза подряд то на клиентской части выйдет ошибка доступа к файлу. При сильной нагрузки сервера или медленном соединении, файлы могут не доходить до получателя или доходить не полностью. ЗАКЛЮЧЕНИЕВ ходе проделанной работы был реализован клиент серверный чат. Сервер поддерживает большое количество пользователей, отправку файлов, пересылку приватных сообщений, ведёт список подключенных клиентов и администрирование клиентов, работая в локальной сети. Клиентская часть поддерживает отправку общих и приватных сообщений, отправку файлов также клиент ведёт список пользователей, который получает от сервера, возможность выбрать имя в чате. Достоинством этой системы является быстродействие текст моментально передаётся по сети даже при медленном соединении, возможность общаться большому количеству людей, делает эту систему удобной для работы группы лиц, решения общих проблем. Одним из недостатков является то, что для реализации работы были использованные не актуальные компоненты, в которых не такой большой спектр возможностей, и возможно с ними не так удобно работать, как с более продвинутыми. Но целью моей работы являлось изучение методов и алгоритмов простейшей работы и взаимодействия приложений по сети, так что этот недостаток не так важен. Путей дальнейшего совершенствования системы огромное множество, например: Перевод системы на актуальные компоненты работы по сети. Добавление видео чата. Добавления смайликов. Улучшение протокола, для оптимизации быстродействия. Доработка протокола пересылки файлов. Внедрение мульти платформенной системы, к примеру чтобы можно было подключится к чату с помощью телефона, или любой другой операционной системы. Введение регистрации пользователей, это также позволит реализовать доставку сообщений не активным в данный момент клиентам. СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВАрлоу Д., Нейштадт И. UML2 и Унифицированный процесс. Практический объектно-ориентированный анализ и проектирование, 2-е изд.: Пер. с англ. – СПб.: СимволПлюс, 2019. – 624 с., ил. В.Б. Сибилев. Проектирование баз данных: учебное пособие. - Томск: ТМЦДО, 2018. В.М. Попова Глобальный бизнес и информационные технологии. – Под.ред. В.М. Попова, Москва, 2018. Д.Э Фуфаев, Э.В.Фуфаев / Разработка и эксплуатация автоматизированных информационных систем: учебник для студ. учреждения сред. проф. образование СПб.: Питер, 2019.– 2-е изд. Камер Э. Д. Компьютерные сети и Internet / Э. Д. Камер. – М.: Вильямс, 2002. – 640 с. Маклаков С. В. Моделирование бизнес-процессов с AllFusion Process Modeler (BPwin 4.1). М.: ДИАЛОГ-МИФИ, 2018. – 340 c. Олифер В. Г. Компьютерные сети. Принципы, технологии, протоколы / В.Г. Олифер, Н.А. Олифер. – СПб.: Питер, 2018. – 960 с. Программирование на Visual C#: учебное пособие для среднего профессионального образования / А. А. Казанский. – 2 – е изд. Программирование. Объектно-ориентированный подход; учебник и практикум для вузов / С.В. Зыков. – Москва: Издательство Юрайт. Проектирование информационных систем: учебник и приктикум для сред. проф. образования / Д.В. Чистов, П.П. Мельников, А.В. Золотарюк, Н.Б. Ничепорук. Рамбо Дж., Якобсон А., Буч Г. UML: специальный справочник. – СПб.: Питер, 2019. Таненбаум Э. Компьютерные сети / Э. Таненбаум, Д. Уэзеролл ; пер. А. Гребеньков. – СПб.: Питер, 2019. – 960 с. http://www.sources.ru/ – Карих Н. Алгоритм работы сокетного сервера http://docs. luksian.com – Алгоритм работы сокетного сервера http://www.Visual Studiosources.ru/ – Сокеты в Visual Studio |