|
|
Опубликовано 21.12.2015 11:00:26
|
|
|

Для дальнейшего упрощения слушателей для протокола HTTP, . .NET предоставляет класс HttpListener в пространстве имён System.Net. Сопровождая этот объект, . .NET предоставляет ряд связанных объектов, инкапсулирующих работу HTTP-обработки. Обратите внимание, что этот класс использует Http.sys системных компонентов для выполнения задачи, поэтому его можно использовать только на операционных системах Windows XPSP2 или Server 2003 и новее.
Класс HttpListener ещё больше упрощает операцию прослушивания и достаточно указать адрес прослушивания, номер порта и виртуальный путь через метод строк для начала работы прослушивания.
После начала прослушивания метод GetContext блокирует поток, когда приходит запрос клиента, HttpListener возвращает объект HttpListenerContext в качестве общего прокси для обработки запросов клиента, через свойство Request объекта прокси-объекта можно получить объект типа HttpListenerRequest, представляющий параметры запроса; этот объект объективизирует большинство параметров запроса, поэтому , мы можем получить параметры запроса через ряд свойств, которые он предоставляет. Например, свойство HttpMethod в HttpListenerRequest предоставляет запрашиваемый тип метода. С помощью атрибута Response прокси мы можем получить объект обработки ответа типа HttpListenerResponse, который инкапсулирует данные и операции ответа, что значительно упрощает программную нагрузку ответа, а рабочий процесс выглядит следующим образом:
//检查系统是否支持 если (! HttpListener.IsSupported)
{ бросить new System.InvalidOperationException( «Чтобы использовать HttpListener, вы должны быть на Windows XP SP2 или Server 2003 или новее!» );
} Обратите внимание, что префикс должен заканчиваться чертой чертой чертой / вперёд строка[] префиксы = новая строка[] { "http://localhost:49152/" }; Создайте слушателя. Слушатель HttpListener = новый HttpListener(); Добавьте префикс монитора. foreach (строка s в префиксах)
{ слушателя. Префиксы.Add(s);
} Начинайте слушать слушателя. Start(); Console.WriteLine("listening..."); Пока (правда)
{ Примечание: метод GetContext блокирует поток до поступления запроса HttpListenerContext context = слушатель. GetContext(); Получите объект запроса HttpListenerRequest request = контекст. Запрос; Console.WriteLine("{0} {1} HTTP/1.1", запрос. HttpMethod, запрос. RawUrl); Console.WriteLine("Принять: {0}", строка. Запросить присоединиться(","). AcceptTypes)); Console.WriteLine ("Accept-Language: {0}", Верёвка. Запросить присоединиться(","). UserLanguages)); Console.WriteLine("User-Agent: {0}", запрос. UserAgent); Console.WriteLine("Accept-Encoding: {0}", запрос. заголовки["Accept-Encoding"]); Console.WriteLine("Соединение: {0}", Просьба. Сохранять Живые е? «Держи живым»: «близко»); Console.WriteLine("Host: {0}", запрос. UserHostName); Console.WriteLine("Pragma: {0}", запрос. заголовки["Pragma"]); Получите цель ответа Ответ HttpListenerResponse = контекст. Response; Постройте содержимое ответа ответ строки Строка = @"<html> <head><title>С HttpListener Server</title></head> <body><h1>Всем привет.</h1></body> ";</html> Задайте содержимое заголовка, длину, кодировку ответа Ответ. ContentLength64 = System.Text.Encoding.UTF8.GetByteCount(ответСтрока); Ответ. ContentType = «text/html; charset=UTF-8"; Выходные отклики System.IO.Stream output = ответ. OutputStream; System.IO.StreamWriter = новый System.IO.StreamWriter(output); Писатель. Write(ответString); Выходной поток должен быть отключён Писатель. Close(); if (Console.KeyAvailable) перерыв;
} Отключите сервер слушателя. Стоп();
При использовании HttpListener часто используемые параметры запроса и ответа превращаются в свойства объекта, что значительно снижает нагрузку на программирование. Однако большинство параметров всё равно необходимо получить доступ через индексатор заголовков, как и параметр запроса Accept-Encoding в приведённом выше примере, к которому мы не можем получить доступ напрямую через свойства. |
Предыдущий:CSS-файлы и js-файлы сопровождаются вопросительным знакомСледующий:День начался!! Давайте, все
|