Программное обеспечение для обмена сообщениями между клиентами посредством сети

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

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 21.07.2014
Размер файла 352,5 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Размещено на http://www.allbest.ru/

Министерство образования республики Беларусь Учреждение образования "Белорусский государственный университет информатики и радиоэлектроники"

Факультет компьютерных систем и сетей Кафедра электронных вычислительных машин

Дисциплина: Конструирование программ и языки программирования

ПОЯСНИТЕЛЬНАЯ ЗАПИСКА

к курсовой работе на тему "Программное обеспечение для обмена сообщениями между клиентами посредством сети"

Минск 2014

Задание

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

программа клиент сообщение сеть

Содержание

  • Введение
  • Глава 1. Обзорная часть
  • Глава 2. Диаграммы классов и данных
  • Глава 3. Описание методов и алгоритмов
  • Глава 4. Тестирование
  • Заключение

Список источников

Введение

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

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

Глава 1. Обзорная часть

Некоторые теоретические основы разработки.

Вся работа приложения основана на сокетах. Сокет - название программного интерфейсами для обеспечения обмена данными между процессами. Процессы при таком обмене могут исполняться как на одной ЭВМ, так и на различных ЭВМ, связанных между собой сетью. Сокет -- абстрактный объект, представляющий конечную точку соединения. В качестве протокола передачи данных был выбран TCP протокол. Механизм TCP предоставляет поток данных с предварительной установкой соединения, осуществляет повторный запрос данных в случае потери данных и устраняет дублирование при получении двух копий одного пакета, гарантируя тем самым, в отличие от UDP, целостность передаваемых данных и уведомление отправителя о результатах передачи. [2] Сокет привязывается к порту. Порт - цифровой номер, который является программным адресом, используемым для взаимодействия различных конечных точек. Сервер "прослушивает" порт и регистрирует новые подключения, создавая для них сокеты. Принцип работы сервера показан на рисунке

Для работы с сокетами была использована библиотека SFML. SFML это свободная кроссплатформенная мультимедиа библиотека. Она включает в себя следующие модули: System -- управление временем и потоками. Window -- управление окнами и взаимодействием с пользователем. Graphics -- делает простым отображение графических примитивов и изображений. Audio -- предоставляет интерфейс для управления звуком. Network -- для сетевых приложений. Из них в работе использовались только Network, Audio и System для реализации передачи сообщений и аудио-данных. [3]

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

Аналоги:

· Skype. Бесплатное программное обеспечение, обеспечивающее текстовую, голосовую, видео связь через интернет между пользователями. Программа также позволяет совершать конференц-звонки, видео-звонки, а также обеспечивает передачу текстовых сообщений (чат) и передачу файлов. Есть возможность вместо изображения с веб-камеры передавать изображение с экрана монитора. Использование без подключения к интернету не возможно.

· FlylinkDC++. Бесплатное программное обеспечение, обеспечивающее текстовую связь между клиентами через сеть или интернет. Есть возможность обмена файлами. Может использоваться через интернет или локальную сеть. Недостаток - отсутствие голосовой связи

· ICQ. Бесплатный видео-чат и голосовые звонки, групповой чат, поддержка смайлов. Использование без подключения к интернету не возможно.

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

Функциональные возможности программы.

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

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

· Звуковая связь между двумя клиентами

· Возможность использования как через интернет (для этого необходим статический IP на компьютере с серверным приложением), так и через любой другой вид сети: локальная, Wi-Fi

· Уведомления об подключении нового пользователя к каналу, отключении пользователя от канала

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

· Список пользователей, подключенных к каналу

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

Пока не реализованные возможности программы.

· Отправка файлов

· Поддержка смайлов

· Звуковая связь между группами клиентов, или всеми клиентами одновременно

· Видео связь

· Работа в фоновом режиме

· Звуковые уведомления

Глава 2. Описание диаграммы классов и данных

Данная работа состоит из двух приложений: клиентское приложение и серверное. Серверное приложение принимает данные от пользователей, выполняет требуемые операции над ними и отсылает пользователям. Клиентское приложение предоставляет пользовательский интерфейс а также отправляет пользовательские данные серверы и принимает от него другие данные. Оба приложения используют стороннюю библиотеку для работы с сетью и аудио-данными: SFML. Для реализации графической части клиентского приложения использовался Windows Forms.

В этой главе кратко рассмотрены основные классы, их поля, методы и взаимодействие друг с другом. Следующая глава посвящена рассмотрению работы …

Класс Server

Главный класс серверного приложения реализующий приём\передачу сообщений и аудио данных между клиентами

Поля:

int _main_port;

int _system_port;

int _system_messages_port;

int _private_messages_port;

unsigned short _audio_stream_port;

Номера портов, через которые осуществляется обмен данными

static vector<User*> Users;

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

static vector<UsersThreads*> UsersThreadsList;

Вектор, в котором хранятся потоки, связанные с пользователем

Самые значимые методы:

void Do();

Прослушивание портов, и подключение новых пользователей

static void ReceiveMessages(void *param);

Получает новые сообщения от пользователей

static void AreYouOnline(void *param);

Находит отключившихся пользователей

static void SendAudioDataToUser (Packet packet, string &recipient);

Посылает аудио-данные пользователю

static void ReceiveAudioData(void *param);

Принимает аудио-данные от пользователя

Класс User

Главный класс клиентского приложения реализующий приём\передачу сообщений между данным клиентом и сервером.

Поля:

TcpSocket *socket;

TcpSocket *system_socket;

TcpSocket *system_messages_socket;

TcpSocket *private_messages_socket;

TcpSocket *audio_stream_socket;

Сокеты, через которые происходит обмен данными

vector<HANDLE> thread_list;

Вектор, хранящий открытые потоки

map<string, string> users_messages;

Ассоциативный массив, хранящий историю сообщений пользователям

AudioStream *audio_stream;

Экземпляр класса AudioStream, используется для получения и воспроизведения аудио-данных

Самые значимые методы:

static bool Connect(IpAddress *serverIP);

Выполняет подключение к серверу

static void Send(char* message);

Посылает сообщение на сервер

static void SaveMessages(string user_name);

Сохраняет историю сообщений

static void ReceiveMessages(void *param);

Получает сообщения от сервера

static void ReceiveUserList(void *param);

Принимает список пользователей

Класс AudioStream. Используется для приёма и воспроизведения аудио-данных. Наследуется от класса SoundStream, реализация которого находиться в библиотеке SFML

Самые значимые методы:

static void receiveLoop(void *param);

Принимает аудио-данные, и добавляет их в поток воспроизведения

virtual bool onGetData(SoundStream::Chunk& data);

Запрашивает новую часть данных из потока воспроизведения

virtual void onSeek(Time timeOffset);

Изменяет текущую позицию в потоке воспроизведения

Класс Message

Реализует представление сообщения для приёма\передачи его через сеть. Объекты этого класса используются для передачи через сеть. Состоит из одного поля, хранящего сообщение, а так же нескольких простых методом

Класс AudioRecorder

Выполняет считывание аудио-данных с устройства, обрабатывает их и посылает на сервер. Является производным от класса SoundRecorder, реализация которого находиться в библиотеке SFML

Входные и выходные данные.

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

Взаимодействие классов.

Кратко рассмотрим логику работы приложения.

На серверном приложении всю работу по приёму/отправке сообщений выполняет класс Server. Он взаимодействует с классом Message и User, которые представляют сообщение и пользователя соответственно, а так же класс MyExeption, который используется для генерации исключений.

В клиентском приложении за графическую часть отвечают классы Form1, BeginForm, PrivateMessagesFrom, Call. За приём/отправку сообщений отвечает класс User. Взаимодействует с классом Messages. Отправку аудио-данных осуществляет класс AudioRecorder, приём и воспроизведение данных - класс AudioStream. Данные, которыми обмениваются эти классы представлены классом Packet, который реализован в библиотеке SFML и является удобным средством для построения блоков данных и передачи их через сеть.

Диаграммы классов клиентского и серверного приложений представлены в приложении

Глава 3. Описание методов и алгоритмов

Опишем работу метода void Do() - главного метода класса Server.

Суть этого метода сводиться к "прослушиваю" портов и добавлению новых пользователей. Работу его можно описать следующим образом:

1. Создаются объекты класса TcpListener, которые "прослушивают" указанные порты в ожидании нового подключения.

2. Выводиться IP адрес сервера.

3. Запускается отдельный поток для поиска и удаления отключившихся пользователей

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

5. IP адрес клиента проверяется на совпадение с IP адресами уже существующих пользователей, при совпадении существующий пользователь удаляется (т.к. с одного адреса возможно лишь одно подключение)

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

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

8. Создаётся объект класса User, который хранит ник и все сокеты для данного пользователя

9. Для сокетов запускаются потоки, которые будут принимать по ним данные. Дескрипторы потоков записываются в созданные объекты класса User (при его удалении пользователя все потоки для данного пользователя закрываются)

10. Созданный объект класса User добавляется в список всех пользователей. И этот список отсылается пользователям

Блок-схема алгоритма представлена в приложении

Опишем работу метода receiveLoop() из класса AudioStream.

Основная задача этого метода - приём пакетов с сокета для аудио-данных, их анализе и добавлении аудио-данных в буфер воспроизведения аудио.

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

При получении пакета, из него получаем id. Затем id сравнивается с некоторыми константами.

· В случае если id обозначает аудио-данные, то из принятого пакета мы получаем эти данные, вычисляем их размер, и добавляем в буфер воспроизведения. Для доступа к буферу воспроизведения используется специальный класс Mutex, реализация которого находиться в библиотеке SFML. Mutex - это класс, который блокирует параллельный доступ из нескольких потоков к общему ресурсу. Mutex используется в паре с классом Lock, который автоматически открывает доступ к ресурсу при выходе из локальной области видимости т.е. при уничтожении объекта класса Lock.

· Если id обозначает запрос на вызов окна (на этот сокет также отправляется запрос на вызов окна при входящем звонке от другого пользователя) то показываем окно для приёма или отклонения входящего вызова

· Если id не является ни аудио-данными, ни запросом на вызов окна, тогда считаем, что передача аудио-данных от пользователя завершена, выходим из цикла и ждём нового входящего звонка

Блок-схема алгоритма представлена в приложении

Опишем работу метода AreYouOnline() из класса Server серверного приложения, а так же параллельно с ним метод ReceiveSystemMessages() из класса User клиентского приложения т.к. их работа связана между собой

Задачей метода AreYouOnline() является поиск отключившихся пользователей, завершение потоков, связанных сними, и удаление их из списка пользователей. Метод ReceiveSystemMessages() отвечает на запросы метода AreYouOnline() и сам в свою очередь проверяет доступность сервера.

Метод AreYouOnline() выполняет итерацию по всем пользователям, подключенным к серверу, и отправляет им пакет дынных, проверяет флаг возвращенный функцией отправления данных и если этот флаг означает, что сокет отключен, то завершает все потоки открытые для этого пользователя, уведомляет всех пользователей о том, что пользователь отключился и удаляет его из списка пользователей.

Метод ReceiveSystemMessages() принимает пакеты, отправляемые методом AreYouOnline() и если флаг возвращаемый функцией приёма данных, означает что сокет отключен, то завершает потоки, запущенные для пользователя.

Блок-схема алгоритма представлена в приложении

Глава 4. Тестирование

Установка.

Программа поставляется со всеми файлами, необходимыми для ее работы:

· Client.exe.

· Server.exe

· Динамические библиотеки SFML.

· Некоторые библиотеки из распространяемого пакета Microsoft Visual C++

Поддерживаемые операционные системы:

Windows 7 Service Pack 1; Windows 8; Windows 8.1; Windows Server 2003; Windows Server 2008 R2 SP1; Windows Server 2008 Service Pack 2; Windows Server 2012; Windows Vista Service Pack 2; Windows XP

Требования к оборудованию:

· Процессор с тактовой частотой 1,6 ГГц или большей

· 20 Мб доступного пространства на жестком диске

· Видеокарта с поддержкой DirectX 9 и разрешения экрана не менее 1024 x 768

Проверка работоспособности.

1. Запустите приложение Server. На экране появятся IP адреса сервера: локальный и глобальный (в случае если есть выход в интернет)

2. Запустите приложение Client

3. В поле IP введите IP адрес сервера: локальный для подключения по локальной сети или глобальный - для подключения через интернет (для подключения по глобальному IP на сервере должен быть статический IP)

4. В поле Nick введите желаемый ник.

5. Нажмите кнопку Connect. Если подключение выполнено успешно, появиться новое окно: основное окно программы, если возникли какие-либо проблемы при подключении, или некорректны введённые данные, то будет выдано сообщение:

6. В главном окне программы справа находиться список пользователей, в самом низу его - информация о количестве пользователей подключённых к каналу.

7. В главном окне программы, внизу, в поле введите сообщение. Нажмите кнопку Enter. Сообщение появится в окне, слева от списка пользователей

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

9. При нажатии на кнопку Call, появится окно вызова.

10. Зеленая кнопка - позвонить пользователю/принять звонок, красная - отмена/окончание разговора

Заключение

Данная работа представляет собой два приложения:

· Клиентское приложение - успешно справляющееся с задачей отправки сообщений как всем клиентам, так и каждому клиенту отдельно. Так же оно предоставляет возможность звуковой связи между двумя клиентами.

· Серверное приложение - успешно справляющееся с приёмом обработкой и рассылкой сообщений от клиентов всем клиентам.

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

Список источников

1. www.msdn.com

2. http://wikipedia.org

3. www.sfml-dev.org/

4. Р. Лафоре "Объектно-ориентированное программирование в C++", 4-е издание, 2004г.

5. Джордж Шеферд "Программирование на Microsoft VISUAL C++"

6. Герберт Шилдт "Самоучитель C++" 3-е издание, 2003г.

Размещено на Allbest.ru


Подобные документы

  • Разработка клиентской и серверной частей программы, осуществляющей обмен текстовыми сообщениями между удаленными компьютерами локальной сети. Ключевые элементы управления программой, ее листинг и тестирование. Использование систем защиты информации.

    курсовая работа [1,9 M], добавлен 18.12.2011

  • Локальная вычислительная сеть управления систем связи и телекоммуникаций автомастерской. Пропускная способность каналов между клиентами сети и серверами. Отличия стека протоколов 100Base-T от стека протоколов 10Base-T. Расчет работоспособности сети.

    курсовая работа [572,5 K], добавлен 18.01.2016

  • Общая характеристика основ электронного документооборота в бухгалтерии. Изучение обмена информацией между операторами связи и клиентами. Разработка программы автоматической настройки информационных баз системы СБИС++ с учетом особенностей оператора.

    дипломная работа [3,0 M], добавлен 21.10.2014

  • Связи между клиентами, корпоративными компонентами и таблицами базы данных. Таблицы, представляющие бизнес-сущности и имеющие первичный ключ. Защита корпоративных компонентов и отношения между классами. Стратегии проектирования и цикл жизни Web-клиента.

    контрольная работа [913,6 K], добавлен 13.08.2011

  • Анализ системы распределенных локальных сетей и информационного обмена между ними через Интернет. Отличительные черты корпоративной сети, определение проблем информационной безопасности в Интернете. Технология построения виртуальной защищенной сети – VPN.

    курсовая работа [3,7 M], добавлен 02.07.2011

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

    реферат [46,1 K], добавлен 01.12.2010

  • Структура и характеристики незащищенной сети. Анализ угроз и уязвимостей локальной вычислительной сети. Технология, компоненты и сервисы ViPNet. Организация защищенного канала между несколькими ЛВС через Internet и туннелей на однокарточных координаторах.

    курсовая работа [586,0 K], добавлен 23.06.2011

  • Интернет-мессенджеры как современные коммуникационные центры. Характеристика программ, мобильных приложений, веб-сервисов для мгновенного обмена сообщениями. Типы и рынок мессенджеров; реализация голосовой и видеосвязи, обмен файлами, веб-конференции.

    статья [16,0 K], добавлен 18.04.2016

  • Потребность в разработке интернет ресурса для более удобного информирования и обслуживания клиентов фирмы. Проектирование базы данных в MySqlServer для более удобной работы с клиентами ООО "КСС-СЕРВИС". Расчет затрат на разработку программного продукта.

    дипломная работа [3,7 M], добавлен 10.07.2017

  • Возникновение и развитие World Wide Web и глобальной сети Интернет. Интернет-браузеры и программы обмена сообщениями. Направление интернет-технологий в образовательном процессе. Применение Интернет-ресурсов в процессе изучения учебных дисциплин.

    дипломная работа [346,2 K], добавлен 22.02.2013

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.