Программа по оптимизации передачи данных через сервер

Автор работы: Пользователь скрыл имя, 20 Августа 2013 в 23:24, дипломная работа

Описание работы

Актуальность моей работы заключается в создании инструмента для разработки приложений, связанных между собой по сети и работающих как единая система.
Сейчас распространена клиент-серверная сетевая архитектура, в которой задания или сетевая нагрузка распределены между поставщиками услуг (сервисов), называемыми серверами, и заказчиками услуг, называемыми клиентами. Нередко клиенты и серверы взаимодействуют через компьютерную сеть и могут быть как различными физическими устройствами, так и программным обеспечением.

Содержание работы

Введение 3
Глава 1. Оптимизация приложений 6
1.1 Механизмы оптимизации 6
1.2 Архитектурный принцип построения сетей 9
1.3 Пропускная способность сети 11
1.4 Поток данных 12
1.5 Гибридные сети 20
1.6 Брэндмауэр Windows 22
1.7 Отличие С# от Java 24
1.8 JSON. Передача объектов 36
Глава 2. Программная часть 38
2.1 Среда разработки 38
2.2 Язык программирования 39
2.3 Диаграммы классов 40
2.4 Диаграммы взаимодействия 43
2.5 Алгоритм работы 45
2.6 Интерфейс приложения 47
Заключение 49
Список использованной литературы 50

Файлы: 1 файл

Диплом.docx

— 1.24 Мб (Скачать файл)

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

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

В нотации JSON это выглядит так:

Объект (Рис. 4) - неупорядоченный набор пар ключ/значение. Объект начинается с { (открывающей фигурной скобки) и заканчивается } (закрывающей фигурной скобкой). Каждое имя сопровождается : (двоеточием), пары ключ/значение разделяются , (запятой).

                                                  Рис. 4 Объект

 

Массив (Рис. 5) - упорядоченная коллекция значений. Массив начинается с [ (открывающей квадратной скобки) и заканчивается ] (закрывающей квадратной скобкой). Значения разделены , (запятой).

                                                 Рис. 5 Массив

 

Значение (Рис. 6) может быть строкой в двойных кавычках, числом, true, false, null, объектом или массивом. Эти структуры могут быть вложенными.

                                                Рис. 6 Значение 

Глава 2. Программная  часть

2.1 Среда разработки

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

Microsoft Visual Studio объединяет в себе огромное  количество функций, позволяющих  осуществлять разработки для  Windows всех версий, в том числе  и 8, Интернета, SharePoint, различных мобильных  устройств и облачных технологий. В Visual Studio реализуется новая среда  разработчика, благодаря которой  создавать приложения стало проще. Microsoft Visual Studio - это обновленная и  упрощенная программная среда,  для которой характерна высокая  производительность, причем она  не зависит от особенностей  оборудования.

Каждая  новая версия программы состоит  из новейших инструментов и технологий, позволяющих разрабатывать приложения с учетом особенностей и положительных  моментов современных платформ. Например, Visual Studio 2010 может поддерживать более ранние версии, в том числе Windows XP и Windows Server 2003. При этом разработчикам открыта дорога к созданию новых и модернизации уже существующих приложений, предназначенных для ранних версий ОС Windows. Стоит отметить, что в процессе использования поддерживаемых системой вариантов исходные файлы, проекты и решения в программе Visual Studio будут работоспособными, но исходный код может нуждаться в изменениях.

2.2 Язык программирования

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

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

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

C# разрабатывался как язык программирования прикладного уровня для CLR и, как таковой, зависит, прежде всего, от возможностей самой CLR. Это касается, прежде всего, системы типов C#, которая отражает BCL. Присутствие или отсутствие тех или иных выразительных особенностей языка диктуется тем, может ли конкретная языковая особенность быть транслирована в соответствующие конструкции CLR. Так, с развитием CLR от версии 1.1 к 2.0 значительно обогатился и сам C#; подобного взаимодействия следует ожидать и в дальнейшем. (Однако эта закономерность была нарушена с выходом C# 3.0, представляющего собой расширения языка, не опирающиеся на расширения платформы .NET.) CLR предоставляет C#, как и всем другим .NET-ориентированным языкам, многие возможности, которых лишены «классические» языки программирования. Например, сборка мусора не реализована в самом C#, а производится CLR для программ, написанных на C# точно так же, как это делается для программ на VB.NET, J# и др.

2.3 Диаграммы классов

 


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

                             

                                 Рис. 7 Диаграмма классов клиента

 

Класс ClientPanel.

Используемые  методы:

AddLogMessage – выводит текст в чат,

buttonSel_Click – открытие диалога отправки файла, buttonSend_Click – отсылаем клиенту информацию о том, что мы хотим передать файл, если передача файлов уже идет – нажатие кнопки отменяет передачу.

ConvertToByte – любые передаваемые данные представлены массивом байт.

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

receiveBackgroundWorker – фоновый прием данных.

ReceiveFile – прием файла.

RunWorkerCompleted – фоновая операция завершена.

 

Класс NetClientGetBytes: получает массив данных (байт) и получает Ip адрес от сервера.

Класс Settings Sealed. При применении к классу модификатора sealed запрещается другим классам наследование от этого класса.

Класс Settings Static – при помощи данного класса мы получаем настройки от сервера и передаем данные настроек клиенту.

Класс Program – содержит метод main.

Класс Form1 – это наша форма, через нее пользователь взаимодействует с клиентом.

Класс NetClient – получает настройки сервера, данные о других клиентах в сети, передает и получает информацию.

 

 

 

                                  Рис. 8 Диаграмма классов сервера

 

 

Класс Form1 – форма, на которой реализован интерфейс сервера.

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

 

2.4 Диаграммы взаимодействия


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

         Рис. 9 Взаимодействие клиента с сервером и другими клиентами

 

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

На данной диаграмме отображена передача данных от одного клиента – всем.

 


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

                  Рис. 11 передача данных от всех – одному

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

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

 

2.5 Алгоритм работы

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

Если клиент получил настройки и знает  о других клиентах в сети, то участие  сервера в дальнейшем их взаимодействии практически не нужно.

У каждого  клиента свой IP – адрес и ID.

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

private void buttonSend_Click(object sender, EventArgs e)

        {

            if (buttonSend.Text == @"Отправить")

            {

                if (!File.Exists(textBoxFileName.Text))

                {

                    MessageBox.Show(this, @"Файл " + textBoxFileName.Text + @" не найден", Text, MessageBoxButtons.OK,

                                    MessageBoxIcon.Error);

                    readyToTransferFiles = false;

                    return;

                }

 

                if (SendMessage("##TransferFile:" + Path.GetFileName(textBoxFileName.Text)))

                {

                    readyToTransferFiles = true;

                    buttonSel.Enabled = false;

                    buttonSend.Text = @"Отменить";

                }

            }

            else if (buttonSend.Text == @"Отменить")

            {

                if (transferBackgroundWorker.WorkerSupportsCancellation)

                    transferBackgroundWorker.CancelAsync();

                if (receiveBackgroundWorker.WorkerSupportsCancellation)

                    receiveBackgroundWorker.CancelAsync();

                buttonSel.Enabled = true;

                buttonSend.Text = @"Отправить";

            }

        }

 

 

 

 

 

Так же присутствует возможность принимать данные в фоновом режиме.

Список клиентов с сервера приходит в том случае, если обновилась информация о них:

if (clientMessage.Message.StartsWith("##ClientList:"))

            {

                string JsonMessage = clientMessage.Message.Remove(0, "##ClientList:".Length);

                var clientList = JsonConvert.DeserializeObject<List<ClientInfo>>(JsonMessage);

                ProcessClientList(clientList);

                return;

            }

Для нового клиента создается своя панель с  историей:

if (!clientPanels.ContainsKey(clientInfo))

            {

                var panel = new ClientPanel(clientPanel, clientInfo);

                clientPanels.Add(clientInfo, panel);

            }

            if (clientPanels.ContainsKey(clientInfo))

            {

                if (clientPanels[clientInfo] == null)

                    clientPanels[clientInfo] = new ClientPanel(clientPanel, clientInfo);

 

Если поступает  запрос от другого клиента на передачу данных, то выводится диалог с запросом имени и запускается процедура  приема данных:

if (clientMessage.Message.StartsWith("##TransferFile:"))

                {

                    string fname = clientMessage.Message.Remove(0, "##TransferFile:".Length);

                    receiveFile = false;

                    ShowSaveFileDialog(clientInfo, fname);

                    if (!receiveFile)

                        return;

                    int idx = clientPanels.IndexOfKey(clientInfo);

                    InvokeCall(listViewClients, () => listViewClients.Items[idx].Selected = true);

                    InvokeCall(listViewClients, () => listViewClients_DoubleClick(null, null));

                    clientPanels[clientInfo].ReceiveFile(receiveFileName);

                    clientPanels[clientInfo].SendMessage("##FilePort:" + Settings.FilePort);

                    clientPanels[clientInfo].AddLogMessage(">> Входящий файл: " + fname);

                }

 

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

 

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

2.6 Интерфейс приложения


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

                                          Рис. 12 Интерфейс клиента

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

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

Справа находится  список клиентов, в данный момент Client находится Online.

 


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

                                      Рис. 13 Интерфейс сервера

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

Информация о работе Программа по оптимизации передачи данных через сервер