Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Сетевое программирование в Си-шарп ⇐ ПредыдущаяСтр 5 из 5
Несколько следующих уроков будут посвящены теме сетевого программирования. Это достаточно большая область программирования, и для начала ее освоения необходимо разобраться с базовыми понятиями и терминологией. Компьютерная сеть – это система компьютеров, или другого вычислительного оборудования, которые объединены между собой теми или иными каналами связи, и могут обмениваться между собой информацией. Сети классифицируются по такому признаку как архитектура. Наиболее распространенная архитектура «клиент-сервер», о которой многие не раз уже слышали. Рассмотрим аналогию архитектуры клиент-сервер в ситуации из жизни. Человек идет в магазине за хлебом. В данном случае клиентом выступает покупатель, который говорит, что хочет купить хлеб (запрашивает некий ресурс, услугу). Продавец в этой ситуации выступает сервером, который обрабатывает запрос (какой продукт, деньги заплатили, или нет), и выдает ответ (хлеб если заплатили, или до свидания). Покупателей много – клиентов, и всех обслуживает один продавец – сервер. Физически клиентом и сервером могут выступать компьютеры и программное обеспечение. Обмен данными между клиентом и сервером осуществляется посредством сетевых протоколов (http, ftp, pop3, smtp, tcp, udp…). Протокол – сводка правил и методов, по которым будут передаваться данные между узлами сети. Протокол обеспечивает способ передачи информации и обработку ошибок.
Работу стека протоколов можно описать следующей ситуацией. Один начальник компании хочет передать посылку другому начальнику компании. Первый сообщает второму, что пришлет посылку, и второй одобряет. Эти договоренности начальников происходили посредством протокола наивысшего уровня в стеке. Дальше первый начальник сообщает секретарю, что надо сделать и этот секретарь связывается с секретарем второго начальника и говорит «ожидайте курьера, который доставит посылку». Общение секретарей было уже протоколом ниже в стеке. Дальше секретарь вызывает курьера и говорит, что и куда доставить, и тот уже на самом нижнем уровне стека осуществляет передачу данных. Добраться до второй компании он может разными способами - пешком, такси, на рабочем автомобиле. В этой ситуации секретарю (протоколу выше) без разницы, как доберется курьер до места назначения, также как и начальнику не нужно ничего знать про то, как секретари договорятся доставить посылку (может другим способом, не курьером). Это демонстрирует нам механизм инкапсуляции. Если брать сеть Интернет (WWW), то в качестве клиента выступает веб-браузер, а сервером является веб-сервер. Веб-сервер - это компьютер, на котором установлено программное обеспечение, которое реализует необходимый серверный функционал. В интернете обмен данными происходит посредством протокола HTTP (HyperText Transfer Protocol) – протокол передачи гипертекста. Вы вводите в строке браузера имя страницы, браузер делает запрос к веб-серверу, веб-сервер обрабатывает запрос и возвращает страницу. Электронная почта (email) – еще один способ передачи данных (электронных писем) между компьютерами, объединенными в сеть. Есть сервер электронной почты, и его клиенты. Когда клиент1 отправляет почту клиенту2, она посредством протокола SMTP отправляется на сервер. Клиент2 же получает почту с сервера используя протокол POP3. Следующие несколько уроков будут посвящены работе в сети с протоколами прикладного уровня, что на данном этапе обучения будет наиболее полезно и актуально. В платформе .Net для работы с сетью существует пространство имен System.Net;
Протокол HTTP в Си-Шарп. Классы HttpWebRequest и HttpWebResponse Структура HTTP-сообщения имеет следующий вид: [стартовая-строка] [тело-сообщения]
Стартовая строка для запроса и ответа отличаются. [Метод] [URI] HTTP/[Версия]
Здесь метод – название запроса, одно слово заглавными буквами, наиболее часто используются GET, POST, HEAD. URI – идентификатор запрашиваемого ресурса. Версия – цифры, разделенные точкой (например 1.1). Для главной страницы этого сайта стартовая строка будет иметь такой вид: GET / HTTP/1.1
Для ответа стартовая строка выглядит так: HTTP/Версия [Код Состояния] [Пояснение]
Код Состояния – это трехзначный цифровой код, который определяет результат запроса. Например, если клиент запросил при помощи метода GET некий ресурс, и сервер его смог предоставить, такое состояние имеет код 200. Если же на сервере нет запрашиваемого ресурса, он вернет код состояния 404. Есть и много других состояний. Пояснение – это текстовое отображение кода состояния, для упрощенного понимания человека. Для кода 200 пояснение имеет вид «OK». Ответ на запрос главной страницы сайта имеет такой вид: HTTP/1.1 200 OK
HTTP-заголовки Заголовки делятся на те, которые используются в запросах, на те которые включаются в ответы, и на те, которые могут быть как запросе, так и в ответе. Заголовки запросов Перейдя с главной страницы сайта на любую другую страницу, Referer будет выглядеть так: Referer: http://mycsharp.ru/
Заголовок Accept используется для того, чтобы клиент сообщил серверу, какие типы контента он поддерживает. Типы указываются в формате тип/подтип через запятую: Accept: text/html, text/plain, image/jpeg Если тип не может быть обработан, возвращается HTTP-код 406 «Not acceptable». User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:37.0) Gecko/20100101 Firefox/37.0 Content-Length: 2803
Server: Microsoft-IIS/7.0 Content-Type : text/html; charset=utf-8
Date: Mon, 06 Apr 2015 17:09:39 GMT Content-Language: en, ru Тело HTTP cообщения Классы HttpWebRequest и HttpWebResponse пример простой программы, с использованием данных классов, которая получает из интернета указанную страничку: static void Main()
Работа с HTTP-заголовками request.Headers.Add("Content-Language: en, ru");
request.Headers.Set("Content-Language", "en, ru");
request.Referer = "http://google.com" Доступ к конкретному заголовку осуществляется при помощи той же коллекции Headers (коллекция пар имя-значение WebHeaderCollection). В квадратных скобках указываем имя заголовка, и получаем его значение: Console.WriteLine(response.Headers["date"]); // Tue, 07 Apr 2015 17:29:04 GMT Считать все заголовки можно так: foreach(string header in response.Headers)
Content-Length: 77352
В примерах выше все запросы выполнялись методом "GET".У классов HttpWebRequest и HttpWebResponse есть свойство Method. Для запроса оно по умолчанию установлено как "GET", но его можно изменить, например на "POST", об этом методе и будет следующий урок. Для ответа же это свойство только на чтение.
|
Последнее изменение этой страницы: 2019-03-22; Просмотров: 309; Нарушение авторского права страницы