Разработка сетевого программного обеспечения
Функции сетевой организации определены пространствами имен System.Net.Sockets. Через данное пространство имен С# обеспечивает соединения на базе сокетов, что дает разработчикам возможность просматривать организацию сети в виде обычного файла ввода-вывода. Использование сокетов — основополагающий способ сетевой организации в .NET Framework.
Классы и интерфейсы пространства имен System.Net.Sockets также предлагают соединения на базе пакетов, по которым передаются отдельные пакеты информации; это обычный способ передачи аудио и видеоматериалов по Интернету.
Соединения на базе сокетов в С# задействуют потоковые сокеты. С их помощью один процесс устанавливает соединение с другим процессом. При наличии соединения обмен данными между процессами осуществляется в виде непрерывных потоков. По этой причине говорится, что потоковые сокеты обеспечивают службу маршрутизации.
С другой стороны, соединения на базе пакетов в С# используют дейтаграммные сокеты, по которым передаются отдельные пакеты информации. Протокол, используемый для активизации дейта-граммных сокетов— UDP (User Datagram Protocol)-является службой, независящей от соединения , не гарантирующей передачу пакетов в каком-либо заданном порядке. Пакеты могут теряться, дублироваться или поступать без учета последовательности отправки.
Организация серверного приложения с TCP и потоковыми сокетами в С# требует:
Первый шаг— создание объекта класса TcpListener, принадлежащего пространству имен System.Net.Sockets. Данный класс представляет потоковый сокет TCP, посредством которого сервер "прослушивает" запросы. Вызов конструктора TcpListener, например,
TcpListener server = new TcpListener(port);
связывает (присваивает) сервер с заданным номером порта. Любой процесс, выполняющий сетевую обработку информации, самоидентифицируется через пару "IP-адрес/номер порта".
Вторым шагом процесса соединения является вызов метода start класса TcpListener, активизирующего начало прослушивания объектом TcpListener запросов на соединение.
Третий шаг устанавливает соединение между серверным и клиентским приложениями. Сервер выполняет прослушивание на предмет запросов. Сервер создает подключение к клиенту при получении запроса. Объект класса System.Net.Sockets.Socket управляет каждым соединением с клиентом. Метод Acceptsocket класса TcpListener ожидает запроса на соединение и создает его при получении такого запроса. При наличии соединения данный метод возвращает объект socket, как в выражении
Socket connection = server.Acceptsocket();
При получении сервером запроса метод Acceptsocket вызывает метод Accept базового объекта Socket класса TcpListener для установления соединения.
Четвертый шаг — это фаза обработки, когда сервер и клиент взаимодействуют посредством методов Receive и Send объекта Socket. Обратите внимание, что эти методы, а также TCP и потоковые сокеты можно использовать только при установленном соединении клиента и сервера. В противоположность этому UDP и дейтаграммные сокеты мож-
но использовать при отсутствии соединения посредством методов SentTo и ReceiveFrom класса Socket.
Пятый шаг — фаза прерывания соединения. По окончании взаимодействия сервера с клиентом сервер использует метод close объекта Socket для прекращения соединения. После этого большинство серверов возвращается к шагу 2.
Клиенты на базе TCP и потоковых сокетов создаются в процессе выполнения четырех шагов. В первом шаге создается объект класса Tcpciient (принадлежащий к пространству имен system.Net.Sockets) для соединения с сервером. Данное соединение устанавливается посредством метода connect класса Tcpciient.
TcpClient client = new TcpClient();
Cllent.Connect(serverAddress, serverPort);
Здесь объект serverPort имеет тип int и обозначает номер порта сервера; объект serverAddress может быть как экземпляром iPAddress (инкапсулирующим IP-адрес сервера), так и строкой, указывающей имя хоста сервера. Либо программист может передать ссылку на объект класса iPEndPoint, представляющий числовую пару "IP-адрес/номер порта", в другую перегрузку метода Connect. Для установления соединения метод Connect класса TcpClient вызывает метод Connect класса Socket. При успешном соединении метод TcpClient.Connect возвращает положительное целое число; в противном случае возвращается 0.
В шаге 2 для получения объекта Networkstream класс TcpClient использует метод Getstream для записи данных на сервер и их считывания с него. Методы WriteByte и write объекта Networkstream можно использовать для вывода отдельных байтов или наборов байтов на сервере соответственно; аналогичным образом методы ReadByte и Read объекта Networkstream используются для ввода отдельных или наборов байтов с сервера.
Третий шаг— фаза обработки, когда осуществляется взаимодействие клиента с сервером. На данном этапе клиент применяет методы Read, ReadByte, Write и WriteByte класса Networkstream для выполнения соответствующих операций.
По завершении передачи четвертый шаг требует от клиента прекращения соединения вызовом метода close объекта Networkstream. При этом закрывается базовый Socket. Затем клиент вызывает метод close класса TcpClient для прекращения соединения TCP.
C#: сериализация данных
Сериализация — процесс сохранения объектов в виде последовательности битов. Восстановление объектов по сохраненным данным назывется десериализацией. Сериализация позволяет восстановить состояние практически любого объекта в любой части приложения или вообще в другом приложении.
Сериализация данных с помощью System.Xml.Serialization происходит в формате XML. Сериализуются свойства и поля объекта класса в элементы и (или) аттрибуты XML-докумнета. Для сериализации в XML формате доступны только открытые (public) свойства класса.
public class SerializableData
{ private string _StringElement;
private ArrayList _Content = new ArrayList();
[XmlArray]
[XmlArrayItem(typeof(SObject))]
public IList Content
{ get { return _Content; } }
[XmlAttribute]
public int VersionNum
{ get { return _VersionNum; }
set { _VersionNum = value; } }
[XmlElement]
public string StringElement
{ get { return _StringElement; }
set { _StringElement = value; } }
// конструктор без параметров является необходимым для сериализации
public SerializableData() { }}
Сериализовать класс SerializableData можно с помощью XmlWriter:
//Сериализуем полученное
XmlWriter writer = new XmlTextWriter("c:\\serializeExample.xml", System.Text.Encoding.UTF8);
XmlSerializer serializer = new XmlSerializer(typeof(SerializableData));
serializer.Serialize(writer, sd); writer.Close();
Десериализовать полученный файл можно следующим образом:
XmlReader reader = new XmlTextReader("c:\\serializeExample.xml");
XmlSerializer serializer = new XmlSerializer(typeof(SerializableData));
SerializableData sd = (SerializableData)serializer.Deserialize(reader);
reader.Close();
Пространство имен System.Runtime.Seriallzation.Formatters включает в себя еще два пространства имен— *.Binary и *.Soap, каждому из которых соответствует один из двух объектов Formatter, которые можно использовать по умолчанию. Класс ВinаryFormatter сериализует объектный граф в компактном потоке двоичного формата, в то время как класс SoapFormatter представляет граф как сообщение протокола SOAP (Simple Object Access Protocol — простого протокола доступа к объектам) в формате XML.
Класс BinaryFormatter определен в библиотеке mscorlib.dll, поэтому единствен-
ное, что нам потребуется для сериализации при помощи объекта Formatter, — определить использование этого пространства имен:
// Для сериализации объектов в двоичной формате
using System.Runtime.Serialization.Formatters.Binary:
Класс SoapFormatter определен в отдельной сборке, поэтому для сохранения
объекта в формате SOAP вам вначале потребуется добавить ссылку на сборку
System.Runtime.Serializaton.Formatters.Soap.dll, азатем использовать аналогичную команду:
// Для сериализации объектов в формате SOAP
using System.Runtime.Serialization.Formatters.Soap;
Общие сведения о ASP.NET
ASP.NET является единой моделью для разработки веб-приложений с применением минимума кода, которая содержит службы, необходимые для построения веб-приложений для предприятий. ASP.NET является частью платформы .NET Framework, а потому обеспечивает доступ к классам этой платформы. Приложения могут быть написаны на любом языке среды CLR, включая Microsoft Visual Basic, C#, JScript .NET и J#. Эти языки позволяют разрабатывать приложения ASP.NET, которые могут использовать все преимущества среды CLR, типовой безопасности, наследования и т. д.
В ASP.NET входит:
· Платформа для разработки страницы и элементов управления
· Компилятор ASP.NET
· Инфраструктура защиты данных
· Возможности по управлению состоянием
· Конфигурация приложения
· Наблюдение и настройка производительности
· Поддержка отладки
· Платформа веб-служб XML
· Расширяемая среда размещения и управление жизненным циклом приложения
· Расширяемая среда конструктора
· Платформа для разработки страницы и элементов управления
Структура страниц и элементов управления ASP.NET — структура программирования, которая выполняется на веб-сервере для динамического создания и отображения веб-страниц ASP.NET. Веб-страницы ASP.NET можно просматривать в любых веб-обозревателях или клиентских устройства, ASP.NET отображает разметку (такую как HTML) в запрашивающем обозревателе. Как правило, можно использовать одну и ту же страницу для разных обозревателей, так как ASP.NET отображает соответствующую разметку для запрашивающего обозревателя. Однако можно разрабатывать веб-страницы ASP.NET для определенных обозревателей, например для Microsoft Internet Explorer 6, и использовать широкие возможности конкретного обозревателя. ASP.NET поддерживает элементы управления для мобильных устройств, например таких устройств веб-доступа, как сотовые телефоны, переносные компьютеры и PDA.
Веб-страницы ASP.NET являются полностью объектно-ориентированными. На страницах ASP.NET с элементами HTML можно работать, используя свойства, методы и события. Структура страниц ASP.NET предоставляет единую модель отклика на клиентские события в коде, выполняемом на сервере, поэтому реализация разделения клиента и сервера, используемая в веб-приложениях, не нужна. Она также автоматически обрабатывает состояния страницы и ее элементов управления во время цикла обработки страницы.
Структура страниц и элементов управления ASP.NET также инкапсулирует общие функциональные возможности пользовательского интерфейса в удобные повторно используемые элементы управления. Элементы управления, написанные однажды, можно использовать во многих страницах. Они встраиваются в веб-страницу ASP.NET, где они размещаются во время отрисовки.
Структура страниц и элементов управления ASP.NET также предоставляет возможности управления отображением и поведением веб-узла с помощью тем и обложек.