Разработка программы "Сетевой чат" - Дипломная работа

бесплатно 0
4.5 63
Характеристика интегральной среды разработки Microsoft Visual Studio NET, ее особенности. Анализ программ "Сетевой чат", программа-клиент. Основные функции программы-сервера, порядок ее запуска. Влияние персонального компьютера на организм человека.


Аннотация к работе
Более того, Visual Studio .NET позволяет программистам многократно использовать уже имеющиеся у них наработки, а также навыки разработчиков, создающих свои программы на разных языках программирования; Эта интегрированная модель обладает привычным и одновременно интуитивно понятным интерфейсом, позволяя разработчикам использовать свои навыки и знания для эффективного создания широкого спектра приложений, • Всесторонняя поддержка жизненного цикла разработки - Среда Visual Studio .NET обеспечивает поддержку всего жизненного цикла разработки: начиная с планирования и проектирования через разработку и тестирование и вплоть до развертывания и последующего управления. Программа-клиент представляет собой приложение, которое позволяет пользователю отправлять другим собеседникам сообщения и файлы, а также проматривать сообщения, отправленные другими собеседниками, данное приложение посредством разработанного протокола обменивается данными с программой сервером. После запуска программы-клиента пользователь выбирает сервер для подключения, после подключения пользователь видит список доступных собеседников и модет начинать общение, либо просто наблюдать за беседой. Команда Описание guest Подключиться к серверу как гость guest

autorization Авторизоваться на сервере autorization

register Зарегистрировать на сервере register

sendall Отослать всем sendall

send Отправить в приватную комнату send

filerequest Передача файла filerequest

accept Подтвердить прием файла accept

deny Отказать в передаче файла deny

disconnect Отключиться от сервераО качестве проделанной работы и о серьезности проекта говорит то, что программа нашла своих пользователей и внедрена в несколько частных локальных сетей и сеть малого предприятия. В заключении хочется вкратце перечислить список технологий, использованных при реализации данного проекта, дополненный списком научной документации: - Программирование приложений с использованием .NET FrameworkСмотреть вдаль прямо перед собой 2-3 с, поставить палец руки по средней линии лица на расстоянии 25-30 см от глаз, перевести взгляд на конец пальца и смотреть на него 3-5 с, опустить руку. Вытянуть полусогнутую руку вперед и вправо, производить рукой на расстоянии 40-50 см от глаз медленные круговые движения по часовой стрелке и следить при этом глазами за концом пальца, то же при движении левой рукой против часовой стрелки. Поднять глаза вверх, опустить их книзу, повернуть глаза в правую сторону, повернуть глаза в левую сторону. Поднять глаза, опустить глаза, повернуть глаза вправо, повернуть глаза влево. Сядьте удобно и подушечками указательных пальцев надавите в течение 5 сек трехкратно с перерывом в 1-2 сек на следующие четыре точки на обоих глазах: точка 1 расположена на расстоянии 0,3 см от внутреннего угла глаза, точка 2 расположена на нижнем крае глазницы на уровне зрачка, точка 3 расположена на расстоянии 0,5 см от наружного края глаза, точка 4 расположена на расстоянии 0,5 см от наружного конца брови в углублении.

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

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

Обоснование выбора языка программирования

Для решения поставленной задачи была выбрана интегральная среда разработки (ИСР) Microsoft Visual Studio.NET поскольку: - в ней доступны широкие возможности языка C#

- используется широким кругом программистов-профессионалов, разрабатывающих в ОС Windows

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

- удобна в использовании, гибка в настройке

- создает очень эффективный код

- в ней имеется возможность использования готовых библиотек классов

- позволяет импортировать исходный код и проекты для ИСР других ОС

Так как ИСР выбрана Microsoft Visual Studio.NET, соответственно языком программирования выбран C#, поскольку: - «родной» язык для создания приложений в среде .NET

- подлинная объектная ориентированность (всякая языковая сущность претендует на то, чтобы быть объектом)

- компонентно-ориентированное программирование

- безопасный (по сравнению с языками C и C ) код

- унифицированная система типизации

- поддержка событийно-ориентированного программирования

- объединение лучших идей современных языков программирования: Java, C , Visual Basic и др.

При разработке данного проекты было принято решение создать кроссплатформенный клиент для чата, который был реализован в Microsoft Visual Studio.NET, после чего был импортирован в MONODEVELOP и реализован клиент для ОС Ubuntu. Для компиляции клиента под ОС Ubuntu выбрана ИСР MONODEVELOP, поскольку она полностью соответствует возможностям Microsoft Visual Studio.NET. интегральный система microsoft компьютер

Описание инструмента разработки программы

Интегрированная среда разработки (Integrated Development Environment, IDE) Microsoft Visual Studio .NET является последней по времени выпуска версией популярной и широко используемой среды разработки профессионального программного обеспечения (ПО) производства компании Microsoft.

Объединяя в своем составе все положительные стороны предыдущих версий, данная обеспечивает возможность использования всех преимуществ современной технологии Microsoft .NET. В числе основных достоинств MS VS .NET, подостоинству оцененных сообществом профессиональных программистов, можно отметить следующие моменты: • Повышение производительности труда разработчиков - Среда разработки Visual Studio .NET продолжает традиции корпорации icrosoft в области предоставления эффективных инструментальных средств для разработчиков сложного ПО. Обеспечивая среду разработки для всех языков программирования, дополненную набором окон с интуитивно понятными инструментальными средствами, контекстной справкой и автоматизированными механизмами выполнения разнообразных задач разработки, Visual Studio .NET позволяет в сжатые сроки проводить профессиональную разработку программ различного назначения;

• Поддержка нескольких языков программирования - В большинстве профессиональных групп разработчиков, как правило, используется несколько языков программирования - для поддержки такой практики в Visual Studio .NET впервые была обеспечена возможность использования сразу нескольких языков в рамках одной и той же среды. Благодаря применению общего конструктора для компонентов, для форматов XML и HTML, а также наличию единого отладчика, Visual Studio .NET предоставляет разработчикам эффективные средства, независимые от языка программирования. Разработчикам ПО при использовании Visual Studio .NET уже не придется ограничиваться одним языком программирования, адаптируя свою рабочую среду к особенностям этого языка. Более того, Visual Studio .NET позволяет программистам многократно использовать уже имеющиеся у них наработки, а также навыки разработчиков, создающих свои программы на разных языках программирования;

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

Описание разработанного приложения

Программа «Сетевой чат» является сетевой программой, поэтому она состоит из двух частей: программы-сервера и программы-клиента.

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

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

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

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

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

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

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

Описание использованных технологий. Язык программирования C#

Для разработки приложений был использован язык программирования C#, (произносится си-шарп, иногда переводят си-диез) - объектно-ориентированный язык программирования. Разработан в 1998-2001 годах группой инженеров под руководством Андерса Хейлсберга в компании Microsoft как основной язык разработки приложений для платформы Microsoft .NET Framework и впоследствии был стандартизирован как ECMA-334 и ISO/IEC 23270. Компилятор C# входит в стандартную установку .NET Framework.

C# относится к семье языков с С-подобным синтаксисом, из них его синтаксис наиболее близок к C и Java. Язык имеет статическую типизацию, поддерживает полиморфизм, перегрузку операторов (в том числе операторов явного и неявного приведения типа), делегаты, атрибуты, события, свойства, обобщенные типы и методы, итераторы, анонимные функции с поддержкой замыканий, LINQ, исключения, комментарии в формате XML.

Переняв многое от своих предшественников - языков C , Java, Delphi, Модула и Smalltalk - С#, опираясь на практику их использования, исключает некоторые модели, зарекомендовавшие себя как проблематичные при разработке программных систем, например, C# не поддерживает множественное наследование классов (в отличие от C ).

MYSQL и язык запросов SQL

MYSQL («май-эс-кью-эль») - свободная система управления базами данных (СУБД). MYSQL является собственностью компании Oracle Corporation, получившей ее вместе с поглощенной Sun Microsystems, осуществляющей разработку и поддержку приложения. Распространяется под GNU General Public License или под собственной коммерческой лицензией. Помимо этого разработчики создают функциональность по заказу лицензионных пользователей, именно благодаря такому заказу почти в самых ранних версиях появился механизм репликации.

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

Гибкость СУБД MYSQL обеспечивается поддержкой большого количества типов таблиц: пользователи могут выбрать как таблицы типа MYISAM, поддерживающие полнотекстовый поиск, так и таблицы INNODB, поддерживающие транзакции на уровне отдельных записей. Более того, СУБД MYSQL поставляется со специальным типом таблиц EXAMPLE, демонстрирующим принципы создания новых типов таблиц. Благодаря открытой архитектуре и GPL-лицензированию, в СУБД MYSQL постоянно появляются новые типы таблиц.

SQL это язык, ориентированный специально на реляционные базы данных (РБД). Он выполняет большую работу, которую вы должны были бы делать, если бы использовали универсальный язык программирования, например C. Чтобы сформировать РБД на C, вам необходимо было бы начать с нуля. Вы должны были бы определить объект, называемый таблицей, которая могла бы увеличиваться, чтобы иметь любое число строк, а затем создавать постепенно процедуры для вставки и извлечения значений.

Команды в SQL могут работать со всеми группами таблиц как с единым объектом и могут обрабатывать любое количество информации, извлеченной или полученной из них в виде единого модуля.

Описание алгоритма MD5(RFC1321)

Алгоритм MD5 является алгоритмом вычисления "хэш-функции» (message digest) для различных целей - шифрование паролей, проверка целостности файлов, и т.д. На вход подается поток данных произвольной длины, а на выходе получаем хэш длиной 128 бит. Сила этого алгоритма заключается в том, что практически очень сложно, почти невозможно, найти две строки, дающие одинаковый хэш. Однако, при определенных условиях, возможно получение исходного текста. Но этот метод основан на определенном выборе начальных значений, поэтому не представляет практической ценности. Также MD5 алгоритм используется в приложениях криптографии и электронно-цифровых подписей для генерации ключа шифрования.

При разработке данного алгоритма принималось во внимание скорость работы на современных 32-разрядных системах, а также требование минимизации используемой памяти. По сравнению с MD4, MD5 более медленный (примерно на 15 процентов), чем MD4, но в то же время и более устойчивым, в силу особенностей построения.

Введем следующие обозначения: под "словом" будет подразумеваться количество информации в 32 бита, а под "байтом" - 8 бит. Последовательность бит будем рассматривать как последовательность байт, старший байт идет первым, младший - последним. Аналогично представляется последовательность байт, как последовательность слов, только младший байт идет первым.

На вход алгоритма подается входной поток данных длиной N.

N может быть произвольным целым неотрицательным числом. Это число может быть как кратным, так и нет, 8. Процесс вычисления MD5 суммы состоит из нескольких шагов. Рассмотрим их подробнее.

Шаг 1: выравнивание потока.

Процесс выравнивания заключается в дописывании в конец потока 1, а затем некоторого числа нулей. Нули добававляются до тех пор, пока длина всего потока не станет равной 512*N 448, т.е. равной 448 по модулю 512. Такое выравнивание происходит в любом случае, даже если длина потока уже удовлетворяет данному условию.

Шаг 2: добавление длины.

Затем в конец дописывается двоичное представление длины первоначального потока-всего 64 бита. Если же длина больше чем2^64, то берутся младшие 64 бита. Это добавление представляет собой два «слова», младшее идет первым, за ним старшее.

После этого суммарная длина потока станет кратной 16 32- битным словам.

Дальнейшее вычисления основываются на представлении этого расширенного потока как массива слов длины N: A[0, ... N-1].

Шаг 3: инициализация MD буфера.

При вычислениях будет использоваться буфер из 4 слов - A, B, C, D, в котором хранятся результаты промежуточных вычислений. Начальные значения, находящиеся в этом буфере, следующие: A = 0x67452301

B = 0XEFCDAB89

C = 0x98BADCFE

D = 0x10325476

Шаг 4: обработка потока блоками по 16 слов.

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

F(x, y, z) = (x & y) | (~x & z) G(x, y, z) = (x & z) | (y & ~z) H(x, y, z) = x ^ y ^ z I(x, y, z) = y ^ (x | ~z) (4.1)

Здесь «&» обозначает побитовая операция «AND», «|» побитовая операция «XOR», «^» операция побитового «XOR», «~» операция побитового «NOT»

Таблица 4.1 - Таблица истинности функций F(x, y, z), G(x, y, z), H(x, y, z), I(x, y, z) x y z F G H I

0 0 0 0 0 0 1

0 0 1 1 0 1 0

0 1 0 0 1 1 0

0 1 1 1 0 0 1

1 0 0 0 0 1 1

1 0 1 0 1 0 1

1 1 0 1 1 0 0

1 1 1 1 1 1 0

На этом этапе нам также понадобится таблица констант T[1...64], заполненная с помощью следующей формулы: T[i] = [4294967296 * abs(sin(i))] , (4.2) где [] есть операция взятия целой части.

Определим также операцию циклического сдвига слова X на Y:

X<<<Y (4.3)

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

// разбиваем поток на блоки по 16 слов: for i = 0 to N/16 - 1 do

{

// i-й блок заносится в X for j = 0 to 15 do

X[j] = M[i * 16 j]

// Сохраняем значения A, B, C, D

AA = A BB = B

CC = C

DD = D

// раунд 1

// [abcd k s i] обозначает операцию

// a = b ((a F(b, c, d) X[k] T[i]) <<< s)

// выполняется 16 операций: [ABCD 0 7 1] [DABC 1 12 2] [CDAB 2 17 3] [BCDA 3 22 4]

[ABCD 4 7 5] [DABC 5 12 6] [CDAB 6 17 7] [BCDA 7 22 8]

[ABCD 8 7 9] [DABC 9 12 10] [CDAB 10 17 11] [BCDA 11 22 12]

[ABCD 12 7 13] [DABC 13 12 14] [CDAB 14 17 15] [BCDA 15 22 16]

// раунд 2

// [abcd k s i] обозначает операцию

// a = b ((a G( b, c, d) X[k] T[i]) <<< s)

// выполняется 16 операций: [ABCD 1 5 17] [DABC 6 9 18] [CDAB 11 14 19] [BCDA 0 20 20]

[ABCD 5 5 21] [DABC 10 9 22] [CDAB 15 14 23] [BCDA 4 20 24]

[ABCD 9 5 25] [DABC 14 9 26] [CDAB 3 14 27] [BCDA 8 20 28]

[ABCD 13 5 29] [DABC 2 9 30] [CDAB 7 14 31] [BCDA 12 20 32]

// раунд 3

// [abcd k s i] обозначает операцию

// a = b ((a H(b, c, d) X[k] T[i]) <<< s)

// выполняется 16 операций: [ABCD 5 4 33] [DABC 8 11 34] [CDAB 11 16 35] [BCDA 14 23 36]

[ABCD 1 4 37] [DABC 4 11 38] [CDAB 7 16 39] [BCDA 10 23 40]

[ABCD 13 4 41] [DABC 0 11 42] [CDAB 3 16 43] [BCDA 6 23 44]

[ABCD 9 4 45] [DABC 12 11 46] [CDAB 15 16 47] [BCDA 2 23 48]

// раунд 4

// [abcd k s i] обозначает операцию

// a = b ((a I(b, c, d) X[k] T[i]) <<< s)

// выполняется 16 операций: [ABCD 0 6 49] [DABC 7 10 50] [CDAB 14 15 51] [BCDA 5 21 52]

[ABCD 12 6 53] [DABC 3 10 54] [CDAB 10 15 55] [BCDA 1 21 56]

[ABCD 8 6 57] [DABC 15 10 58] [CDAB 6 15 59] [BCDA 13 21 60]

[ABCD 4 6 61] [DABC 11 10 62] [CDAB 2 15 63] [BCDA 9 21 64]

A = AA

B = BB

C = CC

D = DD

}

Шаг 5: вывод MD5.

Окончательный результат, находящийся в буфере A-D, и есть почти готовый хэш. Выводя «слова» из этого буфера в обратном порядке, мы получим готовый хэш. Т.е. md5hash=DCBA.

Теперь о свойствах алгоритма в целом.

Для начала краткое описание отличий от MD4.

Различия между MD4 и MD5

Следующий список представляет собой различия между MD4 и MD5: 1. MD5 имеет на один раунд больше - 4 против 3 у MD4.

2. Что бы уменьшить влияние входного текста была введена уникальная константа для каждого раунда-T[i].

3. Во втором раунде заменили функцию g с (XY v XZ v YZ) на (XZ v Y not(Z)), для того, чтобы сделать g менее симметричной.

4. На каждом шаге используется значение, полученное на предыдущем шаге. Это дает более быстрое изменение результата при изменении входных данных.

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

6. Изменен порядок, в котором обрабатываются слова в раундах 2 и 3, для того чтобы сделать их менее похожими друг на друга.

Скорость работы и производительность

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

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

Вычисления проводились на Intel Pentium III 750 МГЦ. В качестве двух реализаций были выбраны реализация из пакета

OPENSSL и основанная на RFC1321.

Таблица 4.2 - Сравнение алгоритмов MD4 и MD5

MD4 MD5

RFC 2.574 сек 37940 КБ/сек 2.614 сек 37359 КБ/сек

OPENSSL 0.891 сек 109603 КБ/сек 1.152 сек 84771 КБ/сек

Результаты исследования показывают, что: • В реализации RFC MD5 медленнее MD4 на 1.55%..4.92%

• В реализации MD5 медленнее MD4 на 29.29%..39.82%

Но, тем не менее, в настоящее время MD5 используется гораздо шире, чем MD4. Это связано в первую очередь с повышенной надежностью первого.

Надежность

В 1996 году появилась статья, которая позволила некоторым авторам считать данный алгоритм взломанным. Основная идея такая: если бы была возможность задать произвольные начальные значения буфера MD5 (0x67452301, 0XEFCDAB89, 0x98BADCFE, 0x10325476), то тогда можно было бы подобрать два сообщения, которые не различаются, кроме, быть может, в нескольких разрядах, таких, что для них может быть построен один и тот же дайджест. Математически это выражается так: MD5(IV, M1) = MD5(IV, M2), где IV = Initial Values = начальные значения, M1 и M2 два разных сообщения.

Автор данного сообщения, Hans Dobbertin, нашел, что если в качестве начальных значений буфера использовать A = 0x12AC2375, B = 0x3B341042, C = 0x5F62B97C, D = 0x4BA763ED, и задать содержимое блока данных для преобразования следующим образом: X0 = 0XAA1DDABE, X1 = 0XD97ABFF5, X2 = 0XBBF0E1C1, X3 = 0x32774244, X4 = 0x1006363E, X5 = 0x7218209D, X6 = 0XE01C136D, X7 = 0x9DA64D0E, X8 = 0x98A1FB19, X9 = 0x1FAE44B0, X10 = 0x236BB992, X11 = 0x6B7A779B, X12 = 0x1326ED65, X13 = 0XD93E0972, X14 = 0XD458C868, X15 = 0x6B72746A.

Тогда второе сообщение строится из первого по такой формуле:

(4.4)

Тогда MD5(IV, X) = MD5(IV, X") = BF90E670752AF92B9CE4E3E1B12CF8DE (4.5)

Стойкость к нахождению коллизий

Нахождению коллизий препятствует быстрый обвал выходной функции. К примеру, рассмотрим два хэша от двух сообщений, различающихся в одном бите: MD5(abc) = 900150983CD24FB0D6963F7D28E17F72 (4.6)

MD5(acc) = 1673448EE7064C989D02579C534F6B66 (4.7)

Отсюда хорошо видно, что выходные значения отличаются значительно. Полный перебор же - занятие бессмысленное, так как при имеющихся скоростях порядка 100 Мб/сек, полный перебор занял бы около 1062 лет, и при этом потребовал бы 2230 Гб места.

Так что MD5 по праву считается надежным алгоритмом.

Описание разработанных компонентов программы. Описание базы данных

При реализации данного проекта было решено использовать базу данных MYSQL, поскольку: - предполагается дельнейшее развитие проекта

- наиболее распространенная и простая в использовании БД

- возможно использование уже существующего сервера

- используется язык SQL(достаточно прост и удобен)

Описание структуры базы данных.

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

Таблица 4.3 - Представление таблицы данных users: login pass

Создание базы данных DATABASEKACHAT, таблицы users: str = "CREATE DATABASE DATABASEKACHAT ON PRIMARY "

"(NAME = DATABASEKACHAT_Data, "

"FILENAME = "Database.mdf", "

"SIZE = 3MB, MAXSIZE = 10MB, FILEGROWTH = 10%) "

"LOG ON (NAME = DATABASEKACHAT_Log, "

"FILENAME = "DATABASELOG.ldf", "

"SIZE = 1MB, "

"MAXSIZE = 5MB, "

"FILEGROWTH = 10%)";

MYCONN.Open();

MYCOMMAND.EXECUTENONQUERY();

str1 = "CREATE TABLE users"

"(login NVARCHAR(25), pass NVARCHAR(100))";

MYCONN = new SQLCONNECTION(CONNECTIONSTRING);

MYCOMMAND = new SQLCOMMAND(str1, MYCONN);

MYCONN.Open();

MYCOMMAND.EXECUTENONQUERY();

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

Описание протокола передачи данных

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

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

Таблица 4.4 - Команды клиента

Команда Описание guest Подключиться к серверу как гость guest

autorization Авторизоваться на сервере autorization

register Зарегистрировать на сервере register

sendall Отослать всем sendall

send Отправить в приватную комнату send

filerequest Передача файла filerequest

accept Подтвердить прием файла accept

deny Отказать в передаче файла deny

disconnect Отключиться от сервера

Таблица 4.5 - Команды сервера: list Отправить список собеседников list …

broadcast Вывод информации/сообщения в общую комнату broadcast

disconnect Отключение сервера message Приватное сообщение собеседнику message

backmessage Приватное сообщение отправителю backmessage

filerequest Ответ на запрос передачи файла

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

Пример работы по протоколу(К - клиент, С - сервер): К: guest guest4356 - запрос на подключение

C: list … - подключение прошло удачно, сервер рассылает всем новый список собеседников

С: broadcast « --- guest4356 вошел в чат --- «

К: sendall «Привет всем!!!»

С: usern «broadcast» «Привет всем»

К: «« - клиент отключился

С: broadcast « --- guest4356 покинул чат --- «

С: list … - сервер рассылает всем новый список собеседников

С: «« - сервер остановлен

Программа-сервер

Программа выполняет следующие функции: - Авторизация/регистрация пользователей

- Передача сообщений от одного пользователя в общую комнату

- Перелача сообщений от пользователя в приватную комнату

- Передача запроса на передачу файла от одного пользователя к другому

- Контролирует подключение/отключение клиентов

- Логирование работы сервера и общения, подключения/отключения пользователей

При реализации интерфейса программы были использован класс WINDOWSFORMS. Так же для упрощения разработки были использованы уже готовые реализованные классы.

Описание разработанных классов

Класс «Client» class Client

{

//события приема данных от клиента public event DATARECEIVEDEVENTHANDLER DATARECEIVED;

//событие при отключении клиента public event DISCONNECTEDEVENTHANDLER Disconnected;

private Thread FONELISTENER; //слущающий поток private Socket socket; //сокет для подключения private string name; //имя пользователя public bool disconnected; //флаг подключения клиента public Client(Socket socket); //конструктор клиента public void CONNECTUSER(); //подключение пользователя

//функция, которая слушает сокет private void LISTENINGFUNCTION();

//обработка команд от подключенных клиентов private void Parse(string str);

public string Receive(); //Прием сообщения

//Авторизация подключившегося клиента private string Auth(string str);

//отправить сообщение клиенту public void Send(string str);

//отключение клиента public void Disconnect(string str);

}

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

Класс «Server». public class Server

{ private Thread BGLISTENER; //поток, слушающий клиентов private Socket LISTENERSOCKET; //сокет для клиентов private List clients; //список подключенных клиентов private int SERVERPORT; //порт для подключения public bool running; //флаг запущен сервер или нет public Server(int port); //конструктор сервера public void Start(); //запуск сервера public void Stop(); //останов сервера

//запуск потока, слушающего клиентов private void STARTTOLISTEN();

//добавить нового клиента private void CREATENEWCLIENT(Socket socket);

// проверка корректности ника при подключении private bool NICKISINCORRECT(string str);

//обработка команд, приходящих от сервера

// executing received command

// args[0] - sender name

// args[1] - command

// args[2] - target name

// args[3] - parameter. Usually, message text private void COMMANDRUN(string[] args);

private void SENDLIST(); //рассылка списка собеседников

//оброаботка отключившегося клиента private void CLIENTDISCONNECTED(string DISCONNECTEDUSER);

//рассылка информационного сообщения/сообщения в общую комнату private void BROADCASTMESSAGE(string sender, string str);

//отослать сообщение в приватную комнату private void SENDTO(string sender, string target, string str);

//отослать сообщение в приватную комнату отправителю private void SENDBACK(string sender, string target, string str);

//обработка передачи файла private void SENDREQUESTRESULT(string sender, string target, string str);

//функция логирования работы сервера public void ADDTOLOG(string str);

}

Класс «Server» основной в программе, в нем хранится коллекция объектов подключенных клиентов(Client), в данном классе реализуется обмен данными между подключенными клиентами, обработка подключения/отключения клиентов.

Класс «MAINFORM» public partial class MAINFORM : Form

{ private Server brain; //указатель на обьект Server public MAINFORM(Server serv); //конструктор главной формы

//запуск сервера private void STARTBUTTON_Click(object sender, EVENTARGS e);

//останов сервера private void STOPBUTTON_Click(object sender, EVENTARGS e);

//завершение работы сервера private void MAINFORM_FORMCLOSING(object sender, FORMCLOSINGEVENTARGS e);

//спрятать/развернуть окно сервера с трей(панель радом с //часами) private void MAINFORM_Resize(object sender, EVENTARGS e);

//обработка разворачивания окна из трея private void NOTIFYICON1_MOUSECLICK(object sender, MOUSEEVENTARGS e)

//закрыть главное окно, корректно завершить работу сервера private void EXITBUTTON_Click(object sender, EVENTARGS e);

//показать лог работы сервера private void LOGBUTTON_Click(object sender, EVENTARGS e);

}

Класс «MAINFORM» реализует взаимодействие пользователя с интерфейсом программы.

После того как пользователь запустил программу-сервер и сам сервер, создается объект класса Server, у которого есть слушающая функция, которая слушает сокет и ждет новых клиентов, когда подключается новый клиент, создается объект класса Client, который помещается в коллекцию. Данную коллекцию подключенных клиентов и обрабатывает сервер. Объекты Client из коллекции осуществляют взаимодействие через сокет непосредственно с с подключенными к серверу клиентами, они принимают команды, передают их объекту Server, который в свою очередь обрабатывает полученную команду и производит ответные действия. Объект класса MAINFORM созданный при запуске программы-сервера, реализуется взаимодействие интерфейса программы с объектом класса Server/

Программа-клиент

Класс «Client» public class Client

{ private Thread BGLISTENER; //слушающий поток private TCPCLIENT socket; //сокет клиента private bool connected; //флаг подключения public string name; //имя пользователя

//события, срабатывающее при поступлении данных public event DATARECEIVEDEVENTHANDLER DATARECEIVED;

public Client(); //конструктор клиента

//подключение и аторизация на сервере public bool Connect(string SERVERIP, string login, string pass);

//регистрация на сервере public bool Register(string SERVERIP, string login, string pass);

//функция, принимающая данные от сервера private void LISTENINGFUNCTION();

public void Send(string str); //отправка сообщений серверу public void Disconnect(); //отключение от сервера public bool Connected(); //проверка статуса подключения

}

Класс «Client» реализует взаимодействие и обмен данными с сервером.

Класс «Controller» public class Controller

{ private Client chat; //указатель на обьект Client private MAINFORM MAINFORM; //указатель на главную форму private FILETRASFERER transferer; //обьект для передачи файла private string filename; //имя передаваемого файла private string TRANSFERUSER; //кому передавать файл private long FILESIZE; //размер файла private Stream stream; //поток чтени/записи файла public FILETRANSFERING TRANSFERSTATUS; //статус передачи private string SERVERIP; //IP сервера для подключения

//конструктор управляющего обьекта public Controller(MAINFORM form, Client client);

//подключение к серверу, вызов метода Connect обьекта Client public bool Connect(string SERVERIP, string login, string pass);

//регистрация на сервере, вызов метода Register обьекта Client public bool Register(string SERVERIP, string login, string pass);

//выполнение необходимой команды public void EXECUTECOMMAND(string str);

//обработка полученной команды private void Parse(string str);

//отмена передачи файла public void CANCELTRANSFERREQUEST();

//информирование пользователя о ходе передачи private void SHOWTRANSFERPROGRESS(int n, long TOTALSIZE);

//завершение передачи файла private void FINISHTRANSFERFILE(bool success);

//отмена передачи файла public void ABORTTRANSFER();

//отослать сообщение в общую комнату public void SENDALL(string str);

//отослать сообщение в приватную комнату public void SENDPRIVATE(string target, string str);

//передача файла public void SENDFILEREQUEST(string target);

//вернуть статус подключения public bool CHATCONNECTED();

//отключиться от сервера public void CHATDISCONNECT();

//вернуть имя пользователя public string GETNAMECLIENT();

//вернуть IP сервера, к которому подключен клиент, необходимо //для информирования пользователя public string GETSERVERIP();

}

Класс «Controller» является главным в программе, он отслеживает состояние клиента, обмен клиентом данными с сервером и реализует взаимодействие с интерфейсом программы. Так же с помощью данного класса производится вывод информации в общую и приватные комнаты.

Класс «MAINFORM» public partial class MAINFORM : Form

{ private Controller brain; //управляющий обьект public List tabs; //коллекция приватных комнат public FILETRANSFERFORM TRANSFERFORM; //форма для //информирования пользователя о ходе передачи файла private Icon icon1; //иконки трея private Icon icon2;

public MAINFORM(); //конструктор главной формы

//подключение к серверу, создание обектов Controller и Client private void ПОДКЛЮЧЕНИЕTOOLSTRIPMENUITEM_Click(object sender, EVENTARGS e);

static string GETMD5Hash(string input); //вычисление хеша пароля

//установить указатель на управляющийобьект public void SETCONTROLLER(Controller controller);

//вызов метода Connect обьекта Controller public void Login(string SERVERIP, string login, string pass);

//вызов метода Register обьекта Controller public void Register(string SERVERIP,string login, string pass);

//добавление сообщения в главную комнату public void UPDATEMAINWINDOW(string str, bool alarm);

//обновление списка собеседников public void UPDATEUSERLIST(string userlist);

//обработка начжатия клавиши отправки сообщения private void SENDBUTTON_Click(object sender, EVENTARGS e);

//обработка отключения от сервера public void ONDISCONNECT(string reason);

//корректное завершение программы при закрытии гдавной //формы private void MAINFORM_FORMCLOSING(object sender, FORMCLOSINGEVENTARGS e);

//отключение от сервера private void ОТКЛЮЧЕНИЕTOOLSTRIPMENUITEM_Click(object sender, EVENTARGS e);

//отправка сообщения по нажатию клавиши «Enter» private void SENDTEXTBOX_KEYDOWN(object sender, KEYEVENTARGS e);

//выбор собеседника для создания приватной комнаты private void LISTBOX1_MOUSEDOUBLECLICK(object sender, MOUSEEVENTARGS e);

//создание приватной комнаты и интерфейса общения в приватной комнате public void CREATETAB(string str);

//выход из приватной комнаты private void CLOSETAB(string str);

//добавление сообщения в приватную комнату public void UPDATEPRIVATEROOM(string name, string sender, string param, bool backmessage);

//показать созданную приватную комнату private void MAINTABCONTROL_SELECTEDINDEXCHANGED(object sender, EVENTARGS e);

//доступность элементов управления взависимости от состояния //подключения public void CHANGESTATEBUTTON(bool b);

public void ABORTTRANSFER(); //отмена передачи файла public void SETOPPORTUNITYSENDING(bool opportunity);

//обработка свертывания в трей private void MAINFORM_SIZECHANGED(object sender, EVENTARGS e);

//информирование пользователя о сообщении, когда главное //окно свернуто в трей public void STARTALARM();

public void STOPALARM();

//разворачивание из трея private void NOTIFYICON1_MOUSECLICK(object sender, MOUSEEVENTARGS e);

private void MAINFORM_Activated(object sender, EVENTARGS e);

//вызов О Программе private void ОПРОГРАММЕTOOLSTRIPMENUITEM_Click(object sender, EVENTARGS e);

//создание приватной комнаты private void button1_Click(object sender, EVENTARGS e);

}

Класс «MAINFORM» реализует взаимодействие между пользователем и программой.

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

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

Рекомендуемые системные требования: Операционная система Windows ME/2K/XP/Seven/Ubuntu

Видео SVGA (800x600, 65536 цветов)

Процессор x86-совместимый 600 MHZ

Оперативная память 128 MB

Место на жестком диске не менее 10 MB

Устройства ввода Клавиатура, Мышь

Внимание! Для корректной работы программы необходимо, чтобы в вашей системе были установлено средства .NET Framework 3.5 или более поздняя версия. Если данный компонент не установлен у Вас в системе, то его можно найти на официальном сайте Microsoft (http://www.microsoft.com/downloads/details.aspx?FAMILYID=333325FD-AE52-4E35-B531-508D977D32A6&displaylang=en).

Если используется ОС Ubuntu, то необходимо, чтобы был установлен пакет Mono.(данный макет можно скачать с официального сайта http://www.go-mono.com/mono-downloads/download.html, либо установить через Центр Приложений)

Инструкция по использованию программного средства. Программа-сервер

Для корректной работы програамы-сервера необходимо, чтобы был установлен пакет MYSQL 5.5.10 или более новая версия, найти данный пакет можно на официальном сайте продукта http://www.mysql.ru/download/

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

После запуска сервера, появиться главное окно, изображенное на рисунке 5.1.

Рисунок 5.1 - Главное окно программы-сервера

Для того, чтобы клиенты могли подключиться к серверу, необходимо запустить его следующим образом, кликнуть на кнопку «Старт», сервер запустится. Чтобы отобразить лог файла необходимо кликнуть на кнопку «Лог», появиться окно с записями о работе сервера (Рисунок 5.2).

Рисунок 5.2 - Окно вывода лога работы сервера

Останов сервера производится кнопкой «Стоп».

Программа создана так, чтобы можно было запустить только один экземпляр программы-сервера. При попытке запустить второй экземпляр, будет выдано сообщение о невозможности данного действия (Рисунок 5.3).

Рисунок 5.3 - Ошибка при запуске второго экземпляра программы

Программа-клиент

После запуска программы появиться главное окно программы, изображенное на рисунке 5.4.

Рисунок 5.4 - Главное окно программы-клиента

После запуска программы необходимо подключиться к серверу, для этого выбираем меню Файл, далее подключение, либо сочетание клавиш Ctrl Shift C, появиться окно (Рисунок 5.5).

Рисунок 5.5 - Форма подключения к серверу

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

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

Рисунок 5.6 - Окно для регистрации на сервере

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

Если у пользователя нет учетной записи и он не хочет ее заводить, возможно войти на сервер как гость, для этого необходимо в окне «Подключение», установить галочку «Я гость». Программа подключится к серверу с гостевым логином.

После успешного подключения к серверу можно увидеть окно (Рисунок 5.7).

Рисунок 5.7 - Окно программы после подключения к серверу

Теперь пользователь может начать общение в общей комнате.

У пользователя есть возможность общаться с другим собеседником напрямую, в приватной комнате, для этого необходимо выбрать собеседника в списке собеседников и нажать кнопку «Приватная комната», также это можно сделать двойным щелчком по имени собеседника, появится окно (Рисунок 5.8).

Рисунок 5.8 - Приватная комната

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

Также здесь можно отправлять друг другу файл и выходить из приватной комнату, для этого элементы управления расположены справа от окна переписки.

Во время передачи файла программа будет выводить информацию о ходе передачи (Рисунок 5.9).

Рисунок 5.9 - Процесс передачи файла

Для того чтобы отключиться от сервера необходимо нажать Файл и далее Отключение, либо Ctrl Shift D. При закрытии главного окна отключение происходит автоматически.

Пользователь имеет возмо

Вывод
Предметом разработки данного дипломного проектаявилось создание ПО, необходимого для обеспечения общения пользователей в локальной сети. В данном дипломном проекте описаны все необходимые компоненты для создания такой системы ПО.

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

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

- MYSQL

- Создание собственного протокола передачи данных

- Использование многопоточности

- ООП

- Работа со справочным материалом - MSDN, RSDN и др.

Во время реализации данного проекта был приобретен огромный опыт.

Список литературы
1.Интернет-Университет Информационных Технологий [Электронный ресурс]. - Режим доступа: http://www.intuit.ru. - Загл. с экрана. - яз. рус.

2.Wikipedia, the free encyclopedia [Электронный ресурс] : Свободная общедоступная многоязычная универсальная энциклопедия. - Режим доступа: http://en.wikipedia.org/wiki/Main_Page. - Загл. с экрана. - яз. англ.

3.C# и платформы .NET. Библиотека программиста - СПБ.: Питер, 2005 - 796 с.: ил.

4.Visual C# .NET в науке и технике. - М.: Жарков Пресс, 2002. - 638 с.
Заказать написание новой работы



Дисциплины научных работ



Хотите, перезвоним вам?