Система обмена сообщениями

 












Курсовая работа

Система обмена сообщениями

Содержание


Введение

1. Теоретический анализ и проектирование

1.1 Постановка задачи. Функции системы

1.2 Архитектура системы

1.3 Протокол. Описание протокола взаимодействия

1.4 Взаимодействие клиента и сервера

2. Программная реализация

2.1 Используемые компоненты

2.2 Описание свойств и методов

2.3 Исходный код Сервера отвечающий за сетевое взаимодействие

2.4 Исходный код Клиента отвечающий за сетевое взаимодействие

2.5 Порядок работы с программой

2.5.1 Работа с сервером.

2.5.2 Работа с клиентом

2.6 Тестирование системы

Заключение

Используемые источники

Введение


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

Существует несколько разновидностей программной реализации чатов:

·HTTP или веб-чаты. Такой чат выглядит как обычная веб-страница, где можно прочесть последние несколько десятков фраз, написанные участниками чата и модераторами. Страница чата автоматически обновляется с заданной периодичностью.

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

·Программы-чаты для общения в локальных сетях (например, Vypress Chat, Intranet Chat, Pichat). Часто есть возможность передачи файлов.

·Чаты, реализованные поверх сторонних протоколов (например, чат, использующий ICQ).

·Чаты, работающие по схеме клиент-сервер, это позволяет использовать их в сетях со сложной конфигурацией, а также управлять клиентскими приложениями (например, Mychat,Jabber)

чат клиент сервер сеть

В данном курсовом проекте, будет разработана программа клиент-серверного чата, с возможность общения нескольких человек одновременно (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 (Команды сервера).

КомандаИнтерпретация#M<имя отправителя>; <сообщение>Сообщение для всех подключённых клиентов. #N<имя отправителя>Клиент посылает своё имя (nickname) #P<имя отправителя>; <имя получателя>; <сообщение>Приватное сообщение#F<имя файла>Получение файла #S<имя файла>Отправка файла всем клиентам

Особенности:

·При получении сообщения, неважно общее оно или приватное, сервер рассылает его всем подключённым к нему клиентам, но принимает это сообщение только клиент, чьё имя совпадает с именем получателя, в случае с приватным сообщением.

·При получении, какого либо файла сервер сохраняет файл во временной папке и после этого рассылает файл всем подключённым клиентам. (Файлы в папке хранятся до выключения программы)

·Значение приватности не работает при пересылке файла.

Команды клиента


Таблица №2 (Команды клиента).

КомандаИнтерпретация#F<имя файла>Получение файла. #K<новое имя>Сервер прислал новый ник#U{<имя>}Сервер прислал список клиентов#M<сообщение>Общее сообщение#P<имя отправителя>; <имя получателя>; <сообщение>Приватное сообщение#NЗапрос имени от сервера#D<имя>Отключение администратором#A<сообщение>Сообщение от администратора

Особенности:

·Так же как и у сервера у клиента есть временная папка, которая очищается после закрытия программы.

·При отправки клиентом файла сначала отправляется команда для создания файла, потом создаётся файл для отправки (файл записывается в переменную), и после отправляется на сервер.

·Сообщение от администратора появляется не в общем чате а в всплывающем окне.


1.4 Взаимодействие клиента и сервера


Предположим что сервер запушен и нормально функционирует, рассмотрим типичные ситуации работы в сети:

1. Подключение клиента:

·Клиент подключается к серверу зная его адрес и порт.

·Сервер обнаружив новое соединение, отправляет на все соединения строку #N (Запрос имени клиента).

·Все подключенные клиенты в том числе и только что подключенный, получив запрос сервера отправляют на сервер строку #Nимя, где "имя" это имя клиента.

·Сервер получив такую строку добавляет "имя" в список клиентов.

2. Отключение клиента:

Отключение может произойти по разным причинам: клиент сам отключился, клиента отключил администратор, из-за сбоя работы сервера или клиента.

·Отключившись клиент просто прерывает связь с сервером.

·Сервер заметив что кто то отключился, запрашивает у оставшихся подключений их имена послав строку #N (Запрос имени клиента).

·Все подключенные клиенты, получив запрос сервера отправляют на сервер строку #Nимя, где "имя" это имя клиента.

·Сервер получив такую строку добавляет "имя" в список клиентов.

Если инициатива отключения исходит от администратора:

·Сервер посылает строку #Dимя всем подключенным клиентам, где "имя" это имя клиента который должен отключиться.

·Клиент узнав своё имя отключается от сервера

Если произошёл сбой работы сервера:

·Клиент поняв что сервер не отвечает, разрывает соединение с неактивным сервером.

Если произошёл сбой работы клиента, то процедура отключения ничем не отличается от обычной.

3. Отправка общего сообщения:

·Клиент посылает на сервер строку #M сообщение, где сообщение это текст который клиент хочет чтобы видели все участники чата.

·Сервер получив эту строку не изменяя её, просто рассылает её всем клиентам включая отправителя.

·Клиенты получив эту строку отображают сообщение в компонент отображения.

4. Отправка приватного сообщения:

·Клиент c именем имя1 посылает на сервер строку #Pимя1; имя2; сообщение, где сообщение это текст который клиент хочет отправить клиенту с именем имя2, ; - это разделитель.

·Сервер получив эту строку не изменяя её, просто рассылает её всем клиентам включая отправителя.

·Клиент получив эту строку, определив что он получатель отображают сообщение в компонент отображения, все же остальные пропускают строку.

5. Отправка Файла:

·Клиент посылает на сервер строку #F имя файла

·сервер создаёт файл с именем имя файла.

·Клиент посылает файл.

·Клиент посылает строку #S имя файла, что означает что клиент хочет отправить файл c именем имя файла, который уже находится на сервере всем остальным клиентам.

·Сервер рассылает всем подключенным клиентам строку #F имя файла.

·Клиенты создают файл.

·Сервер посылает файл.

2. Программная реализация


Для реализации программ используется среда разработки Delphi XE3 и её стандартные компоненты. Система программирования Delphi рассчитана на программирование различных приложений и предоставляет большое количество компонентов для этого. К тому же работодателей интересует, прежде всего, скорость и качество создания программ, а эти характеристики может обеспечить только среда визуального проектирования, способная взять на себя значительные объемы рутинной работы по подготовке приложений. Возможности Delphi полностью отвечают подобным требованиям и подходят для создания системы обмена мгновенными сообщениями.


2.1 Используемые компоненты


Как уже было сказано выше все используемые компоненты идут в стандартной версии Delphi XE3, но не все они по умолчанию доступны. Основные компоненты которые будут отвечать за передачу данных по сети, нужно включить, чтобы это сделать следует проделать следующие действия:

·Запустить Delphi.

·На верхней панели выбрать вкладку Component => Install Packages => Add

·Найти файл "dclsockets7. bpl" в папке bin c установленной Delphi

·Теперь нужные компоненты будут доступны в программе.

Используемые компоненты для реализации сетевого взаимодействия:

·TServerSocket \\Компонент серверной части

·TClientSocket \\Компонент клиентской части

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



.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, и т.д.), порт которой будет использован. Это своеобразный справочник соответствия номеров портов различным стандартным протоколам. Тип: string;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 Порядок работы с программой


2.5.1 Работа с сервером.


Рисунок 1 - Настройки сервера


Рисунок 1 - Настройки сервера. Главной настройкой является поле "Порт" по умолчанию стоит порт "1010". Сервер можно запустить нажав на кнопку "Запуск", если порт свободен и нет больше никаких проблем то в строке состояния отобразится надпись "Сервер запушен", теперь клиенты могут подключаться к серверу. Отключение сервера происходит нажатием кнопкой "Отключить". Есть возможность свернуть сервер в трэй, нажатием кнопки "Свернуть в трэй".


Рисунок 2 - Лог чата


Рисунок 2 - Лог чата. Это история сервера, в ней ведутся записи о подключении и отключении пользователей, времени запуска и отключении сервера. Кнопка "Сохранить", сохраняет историю в выбранный текстовый файл. Кнопка "Очистить", очищает историю.

Рисунок 3 - Пользователи. Эта закладка со списком подключенных клиентов.

Кнопки:

·Отключить - отключает выбранного пользователя от сервера.

·Сообщение - посылает выбранному пользователю сообщение от администратора сервера.


Рисунок 3 - Пользователи


Сменить ник - изменяет имя клиента в чате на новое введённое администратором.


2.5.2 Работа с клиентом

Рисунок №4 - Закладка "Чат". Закладка на которой и происходит переписка между клиентами. Для того чтобы отослать сообщение нужно написать текст в поле с надписью "Текст сообщения" и нажать кнопку "Send". В том случае если нужно послать сообщение только одному клиенту нужно поставить галочку "ПРИВАТНОЕ" и выбрать получателя из списка.

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


Рисунок 4 - Чат


Рисунок 5 - Подключение и Настройки. Как видно из названия в этой закладке происходит подключение к серверу и настройка клиента.

·"IP" - адрес сервера к которому нужно подключится, для подключения к серверу который включен на том же компьютере что и клиент в поле "ip" пишется "LocalHost".

·"Порт" - порт использует сервер

·"NickName" - имя клиента которое будет отображено остальным клиентам.


Рисунок 5 - Подключение и настройки


·Кнопка "Подключится" подключается к серверу с заданными параметрами, а кнопка "Отключится" соответственно отключается от подключенного сервера.


2.6 Тестирование системы


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

·Существуют некоторые проблемы при передачи файлов, например если передать файл два раза подряд то на клиентской части выйдет ошибка доступа к файлу.

·При сильной нагрузки сервера или медленном соединении, файлы могут не доходить до получателя или доходить не полностью.

Заключение


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

Клиентская часть поддерживает отправку общих и приватных сообщений, отправку файлов также клиент ведёт список пользователей, который получает от сервера, возможность выбрать имя в чате.

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

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

Путей дальнейшего совершенствования системы огромное множество, например:

·Перевод системы на актуальные компоненты работы по сети.

·Добавление видео чата.

·Добавления смайликов.

·Улучшение протокола, для оптимизации быстродействия.

·Доработка протокола пересылки файлов.

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

·Введение регистрации пользователей, это также позволит реализовать доставку сообщений не активным в данный момент клиентам.

Используемые источники


1.Карих Н. Алгоритм работы сокетного сервера // ИсходникиRU [сайт]. URL: #"justify">2.Чат // Википедия - свободнfz энциклопедиz [сайт]. URL: #"justify">.Алгоритм работы сокетного сервера // Библиотека RTFM [сайт]. #"justify">.Сокеты в Delphi // DelphiSource [сайт]. URL: http://www.delphisources.ru/pages/faq/base/sockets_in_delphi.html (дата обращения: 10.05.2012).


Курсовая работа Система обмена сообщениями Содержание Введение 1. Теоретический анализ и проектирова

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ