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

Автор работы: Пользователь скрыл имя, 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 Мб (Скачать файл)

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

 

1.4 Поток данных

Поток данных4 (англ. stream) в программировании — абстракция, используемая для чтения или записи файлов, сокетов и т. п. в единой манере.

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

Поддержка потоков включена в большинство  языков программирования и едва ли не во все современные (на 2008 год) операционные системы.

При запуске  процесса ему предоставляются предопределённые стандартные потоки.

Возможность перенаправления потоков позволяет  связывать различные программы, и придаёт системе гибкость.

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

Все классы потоков определены в пространстве имен System.IO. Чтобы иметь возможность использовать эти классы, в начало программы необходимо включить следующую инструкцию: I using System.IO; Для ввода и вывода на консоль не нужно задавать пространство имен System.IO, поскольку класс Console определен в пространстве имен System.

Класс Stream. Центральную часть потоковой С#-системы занимает класс System.IO.

Stream. Класс  Stream представляет байтовый поток  и является базовым для всех  остальных потоковых классов.  Этот класс также абстрактный,  т.е. мы не можем создать  его объект. В классе Stream определен  набор стандартных потоковых  операций.

C# - Классы  потоков.

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

Все классы потоков определены в пространстве имен System. 10. Чтобы иметь возможность  использовать эти классы, в начало программы необходимо включить следующую  инструкцию: I using System.10;

Для ввода  и вывода на консоль не нужно задавать пространство имен System. 10, поскольку  класс Console определен в пространстве имен System.

Класс Stream

Центральную часть потоковой С#-системы занимает класс System. 10.Stream. Класс Stream представляет байтовый поток и является базовым  для всех остальных потоковых  классов. Этот класс также абстрактный, т.е. мы не можем создать его объект. В классе Stream определен набор  стандартных потоковых операций. Наиболее применяемые методы, определенные в классе stream.

void Closed Закрывает  поток

void Flush () Записывает содержимое потока  в физическое устройство

int ReadByte () Возвращает целочисленное представление следующего доступного байта потока При обнаружении конца файла возвращает значение -1

int Read (byte [] buf, Делает попытку прочитать  numBytes байт в массив buf, начиная  с эле-

int offset, мента  buf [offset], возвращает количество успешно  прочитанных байтов

int numBytes)

long Seek (long offset, Устанавливает текущую позицию  потока равной указанному значению  смещэ-SeekOrigin origin) ния от заданного  начала отсчета

void WriteByte (byte b) Записывает один байт в  выходной поток

void write (byte [] buf, Записывает поддиапазон размером nuaBytes байт из массива buf, начи-int offset, ная с элемента buf [offset] int numBytes)

В общем  случае при возникновении ошибки ввода-вывода методы, представленные в  табл. 14 1, генерируют исключение типа IOException. При попытке выполнить некорректную операцию, например, записать данные в  поток, предназначенный только для  чтения, генерируется исключение типа NotSupportedException.

 Обратите  внимание на то, что в классе stream определены методы, которые считывают  и записывают данные. Однако не  все потоки поддерживают все  эти операции, поскольку возможен  вариант, когда поток открывается  только для чтения или только  для записи. Кроме того, не все  потоки поддерживают функцию  установки в заданную позицию  с помощью метода Seek (). Чтобы определить  возможности потока, используйте  одно или несколько свойств  класса stream. Они представлены в  табл. 14.2. В этой таблице также  описаны свойства Length и Position, которые  содержат длину и текущую позицию  потока, соответственно.

bool canRead Свойство равно значению true, если  из потока можно считывать  данные. Это свойство предназначено  только для чтения

bool CanSee k Свойство равно значению true, если  поток поддерживает функцию установки  в заданную позицию. Это свойство  предназначено только для чтения

bool canwrite Свойство равно значению true, если  в поток можно записывать данные. Это свойство пред­назначено  только для чтения

long Length Свойство  содержит длину потока. Это свойство  предназначено только для чтения

long Position Свойство представляет текущую  позицию потока. Это свойство  можно как читать, так и уста­навливать

Байтовые  классы потоков

Из класса stream выведены такие байтовые классы потоков.

Класс потока Описание

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

Filestream Байтовый  поток, разработанный для файлового  ввода-вывода

Memor yStream Байтовый поток, который использует  память для хранения данных.

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

Символьные  классы потоков.

Чтобы создать  символьный поток, поместите байтовый поток в одну из символьных потоковых  С#-оболочек. В вершине иерархии символьных потоков находятся абстрактные  классы TextReader и TextWriter. Класс TextReader предназначен для обработки операций ввода  данных, а класс TextWriter — для обработки  операций вывода данных. Методы, определенные этими двумя абстрактными классами, доступны для всех их подклассов. Следовательно, они образуют минимальный набор  функций ввода-вывода, который будут  иметь все символьные потоки.

В случае ошибки эти методы могут генерировать исключение типа iOException. (Некоторые  методы могут также генерировать и другие типы исключений.) Особого  внимания заслуживает метод ReadLine (), который считывает целую строку текста, возвращая ее в качестве string-значения. Этот метод полезен при считывании входных данных, которые содержат пробелы.

Метод Описание

void close() . Закрывает источник ввода данных

int Peek () Получает следующий символ из входного потока, но не удаляет его. Возвращает значение -1, если ни один символ не доступен

int Read () - Возвращает целочисленное представление  следующего доступного символа  из вызывающего объекта входного  потока. При обнаружении конца  файла возвращает значение -1

Помимо  методов Write {) и WriteLine {), в классе TextWriter также определены методы

Close () и Flush ():

virtual void Close() virtual void Flush 0

Метод Flush () записывает все данные, оставшиеся в выходном буфере, на физический носитель информации. Метод Close () закрывает поток.

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

Потоковый класс Описание

streamReader Предназначен для чтения символов  из байтового потока. Этот класс  является оболочкой для байтового  входного потока

streamWriter Предназначен для записи символов  в байтовый поток. Этот класс  является оболочкой для байтового  выходного потока

stringReader Предназначен для чтения символов  из строки stringWriter Предназначен для  записи символов в строку.

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

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

Консольный  ввод-вывод данных

Консольный  ввод-вывод данных реализуется посредством  стандартных потоков Console. In, Console. Out и Console .Error. Консольные классы ввода-вывода использовались, начиная с главы 2, поэтому вы уже с ними знакомы. Как вы убедитесь ниже, они обладают и другими возможностями.

Прежде  всего, важно отметить, что большинство  реальных С#-приложений являются не текстовыми, или консольными, а графическими программами или компонентами, которые  опираются на оконный интерфейс, предназначенный для взаимодействия с пользователем. Таким образом, часть С#-системы ввода-вывода, которая  связана с консольным вводом -выводом  данных, не относится к широко используемым средствам. Несмотря на то что текстовые  программы — прекрасные учебные  примеры коротких утилит и некоторых  типов компонентов, они не годятся  для большинства реальных приложений.

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

Поток Console. In — экземпляр класса TextReader, поэтому  для доступа к нему можно использовать методы и свойства, определенные в  классе TextReader. Однако обычно используют методы, определенные в классе Console, которые автоматически считывают  значение свойства Console.In. В классе Console определено два метода ввода информации: Read (> и ReadLine ().

Метод Read () используется для считывания одного символа. static int Read()

Метод Read () возвращает следующий символ, считанный  с консоли. Он ожидает, пока пользователь не нажмет какую-нибудь клавишу, а затем  возвращает результат. Считанный символ возвращается как значение типа int, которое должно быть приведено к  типу char. При возникновении ошибки метод Read () возвращает -I, а в случае неудачного исхода операции генерирует исключение типа IOException. По умолчанию консольный ввод данных буферизован (с ориентацией на строки), поэтому, прежде чем введенный с клавиатуры символ будет послан программе, необходимо нажать клавишу .

 Рассмотрим  пример программы, которая считывает  символ с клавиатуры с помощью  метода Read (). // Считывание символа  с клавиатуры.

 using System;

class Kbln {

public static void Main() { char ch;Console.Write(

 "Нажмите любую клавишу, а затем — : ");

ch = (char) Console.Read(); // Считывание

// char-значения.

Console.WriteLine("Вы нажали клавишу: " + ch);

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

(

 Нажмите  любую клавишу, а затем —  : ю Вы нажали клавишу: ю

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

Чтобы прочитать  строку символов, используйте метод ReadLine (). static string ReadLine()

Метод ReadLine () считывает символы до тех пор, пока не будет нажата клавиша , и  возвращает объект типа string. При неудачном  завершении метод генерирует исключение типа IOException.

Рассмотрим  программу, которая демонстрирует  считывание строки из потока

Console. In с  помощью метода ReadLine (). // Ввод данных  с консоли с помощью метода ReadLine{).

using System;

class ReadString {

public static void Main() { string str;

Console.WriteLine("Введите несколько символов."); str = Console.ReadLine(); Console.WriteLine("Вы ввели: " + str); } I

Вот такие  результаты можно получить при выполнении этой программы.

I Введите  несколько символов.

I Это  всего лишь тест.

I Вы ввели:  Это всего лишь тест.

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

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