Автор работы: Пользователь скрыл имя, 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
Упорядоченный список значений. В большинстве языков это реализовано как массив, вектор, список или последовательность.
Это универсальные структуры данных. Почти все современные языки программирования поддерживают их в какой-либо форме. Логично предположить, что формат данных, независимый от языка программирования, должен быть основан на этих структурах.
В нотации JSON это выглядит так:
Объект (Рис. 4) - неупорядоченный набор пар ключ/значение. Объект начинается с { (открывающей фигурной скобки) и заканчивается } (закрывающей фигурной скобкой). Каждое имя сопровождается : (двоеточием), пары ключ/значение разделяются , (запятой).
Массив (Рис. 5) - упорядоченная коллекция значений. Массив начинается с [ (открывающей квадратной скобки) и заканчивается ] (закрывающей квадратной скобкой). Значения разделены , (запятой).
Значение (Рис. 6) может быть строкой в двойных кавычках, числом, true, false, null, объектом или массивом. Эти структуры могут быть вложенными.
Microsoft Visual
Studio – это новая разработка
компании Microsoft, позволяющая создавать
приложения, работающие на платформе
.net. Особенность этой платформы
заключается в широком наборе
сервисов, которые доступны в
различных языках
Microsoft Visual
Studio объединяет в себе огромное
количество функций,
Каждая
новая версия программы состоит
из новейших инструментов и технологий,
позволяющих разрабатывать
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# и др.
Класс 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 – файл с данными о клиентах, находящихся в сети, сетевых настройках и рассылает их всем клиентам, сервер пингует всех клиентов, если какой – либо не отвечает, то рассылается файл с новыми данными. Такая же система, если подключается новый клиент. Таким образом все клиенты будут иметь актуальную информацию о друг – друге.
Рис. 9 Взаимодействие клиента с сервером и другими клиентами
В начале сервер отсылает каждому клиенту информацию о других клиентах в сети, их сетевых настройках. Далее клиенты уже получив данные друг о друге могут взаимодействовать без сервера. Сервер пингует клиентов каждую минут, если како-то клиент отключился или подключился новый, то сервер рассылает обновленную информацию клиентам друг о друге.
На данной диаграмме отображена передача данных от одного клиента – всем.
Рис. 11 передача данных от всех – одному
Данная диаграмма почти аналогична предыдущей, но здесь показана передача данных не от одно ко всем, а от всех – одному.
Такая реализация
взаимодействия позволяет значительно
разгрузить сервер, а так же появляется
возможность реализовать
При запуске клиент ищет файл настроек, если его удается получить, то сетевые настройки присваиваются. Если нет, то настройки остаются по – умолчанию.
Если клиент получил настройки и знает о других клиентах в сети, то участие сервера в дальнейшем их взаимодействии практически не нужно.
У каждого клиента свой IP – адрес и ID.
Если мы хотим отослать другому клиенту какой – либо файл, то в начале посылается запрос на передачу данных, если клиент его подтверждает – файл передается. Если же передача уже идет, то повторное нажатие на кнопку «принять» отменяет ее:
private void buttonSend_Click(object sender, EventArgs e)
{
if (buttonSend.Text == @"Отправить")
{
if (!File.Exists(textBoxFileName.
{
MessageBox.Show(this, @"Файл " + textBoxFileName.Text + @" не найден", Text, MessageBoxButtons.OK,
readyToTransferFiles = false;
return;
}
if (SendMessage("##TransferFile:"
+ Path.GetFileName(
{
readyToTransferFiles = true;
buttonSel.Enabled = false;
buttonSend.Text = @"Отменить";
}
}
else if (buttonSend.Text == @"Отменить")
{
if (transferBackgroundWorker.
transferBackgroundWorker.
if (receiveBackgroundWorker.
receiveBackgroundWorker.
buttonSel.Enabled = true;
buttonSend.Text = @"Отправить";
}
}
Так же присутствует возможность принимать данные в фоновом режиме.
Список клиентов с сервера приходит в том случае, если обновилась информация о них:
if (clientMessage.Message.
{
string JsonMessage = clientMessage.Message.Remove(
var clientList = JsonConvert.DeserializeObject<
ProcessClientList(clientList);
return;
}
Для нового клиента создается своя панель с историей:
if (!clientPanels.ContainsKey(
{
var panel = new ClientPanel(clientPanel, clientInfo);
clientPanels.Add(clientInfo, panel);
}
if (clientPanels.ContainsKey(
{
if (clientPanels[clientInfo] == null)
clientPanels[clientInfo] = new ClientPanel(clientPanel, clientInfo);
Если поступает запрос от другого клиента на передачу данных, то выводится диалог с запросом имени и запускается процедура приема данных:
if (clientMessage.Message.
{
string fname = clientMessage.Message.Remove(
receiveFile = false;
ShowSaveFileDialog(clientInfo, fname);
if (!receiveFile)
return;
int idx = clientPanels.IndexOfKey(
InvokeCall(listViewClients, () => listViewClients.Items[idx].
InvokeCall(listViewClients, () => listViewClients_DoubleClick(nu
clientPanels[clientInfo].
clientPanels[clientInfo].
clientPanels[clientInfo].
}
Если мы отправляем клиенту запрос на передачу данных, и он согласился, то присылает порт, на который мы отправляем данные. При двойном клике на имени клиента в списке клиентов, если существует панель для отображения истории клиента – то показываем ее. Иначе создаем новую панель и показываем.
При выходе из приложения все сокеты закрываются, что бы не висели в системе.
На данном рисунке представлен интерфейс клиента. Адрес сервера и номер порта – это настройки, которые приходят нам при подключению к серверу. Сейчас они выставлены по – умолчанию. Поле название – это имя клиента, под которым его будут видеть остальные клиенты.
Кнопка подключить, служит для соединения с сервером. По – середине находится панель истории, в ней отображается как передача сообщений, так и передача различных данных.
Справа находится список клиентов, в данный момент Client находится Online.
Интерфейс сервера достаточно прост. Он отображает подключенных к нему клиентов. Имя каждого клиента, его IP – адрес, номер порта. И при подключении или отключении клиента от сети обновляет и рассылает актуальные настройки.
Информация о работе Программа по оптимизации передачи данных через сервер