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

Вид: 17368|Ответ: 0

[Источник] Веб-сервер на базе HttpListener

[Скопировать ссылку]
Опубликовано 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-файлы сопровождаются вопросительным знаком
Следующий:День начался!! Давайте, все
Отказ:
Всё программное обеспечение, программные материалы или статьи, публикуемые Code Farmer Network, предназначены исключительно для учебных и исследовательских целей; Вышеуказанный контент не должен использоваться в коммерческих или незаконных целях, иначе пользователи несут все последствия. Информация на этом сайте взята из Интернета, и споры по авторским правам не имеют отношения к этому сайту. Вы должны полностью удалить вышеуказанный контент с компьютера в течение 24 часов после загрузки. Если вам нравится программа, пожалуйста, поддержите подлинное программное обеспечение, купите регистрацию и получите лучшие подлинные услуги. Если есть нарушение, пожалуйста, свяжитесь с нами по электронной почте.

Mail To:help@itsvse.com