За да се опростят още повече слушателите на 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)
{ throw new system.InvalidOperationException( "За да използвате HttpListener, трябва да сте на Windows XP SP2 или Server 2003 или по-нова!" );
} Обърнете внимание, че префиксът трябва да завършва с / напреднал кос черт стринг[] префикси = нов низ[] { "http://localhost:49152/" }; Създайте слушател. HttpListener слушател = нов HttpListener(); Добавете префикса на монитора. foreach (низ s в префикси)
{ слушател. Префикси.Add(s);
} Започни да слушаш слушател. Start(); Console.WriteLine("слушане..."); докато (вярно)
{ Забележка: Методът GetContext ще блокира нишката, докато не пристигне заявката HttpListenerContext context = слушател. GetContext(); Вземи обекта за заявка HttpListenerRequest request = контекст. Молба; Console.WriteLine("{0} {1} HTTP/1.1", заявка. HttpMethod, заявка. RawUrl); Console.WriteLine("Accept: {0}", низ. Join(",", заявка. AcceptTypes)); Console.WriteLine("Accept-Language: {0}", Нишка. Join(",", заявка. 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 сървъра</title></head> <body><h1>Здравей, свят.</h1></body> ";</html> Задайте съдържание, дължина, кодиране на заглавието на отговора отговор. ContentLength64 = System.Text.Encoding.UTF8.GetByteCount(responseString); отговор. ContentType = "текст/html; charset=UTF-8"; Изходни отговори System.IO.Stream output = отговор. OutputStream; System.IO.StreamWriter writer = нов System.IO.StreamWriter(output); писател. Write(responseString); Изходният поток трябва да бъде изключен писател. Close(); ако (Console.KeyAvailable) прекъсване;
} Изключи сървъра слушател. Стоп();
При използване на HttpListener, често използваните параметри за заявка и отговор се превръщат в свойства на обекта, което значително намалява натоварването по програмиране. Въпреки това, повечето параметри все пак трябва да се достъпят чрез индексера Headers, точно както параметъра за заявка Accept-Encoding в горния пример, до който не можем да достъпим директно чрез свойствата. |