|
|
Publicerad på 2015-12-21 11:00:26
|
|
|

För att ytterligare förenkla lyssnare för HTTP-protokollet, . .NET tillhandahåller HttpListener-klassen i namnrymden System.Net. Med detta objekt följer . .NET tillhandahåller en serie relaterade objekt som kapslar in HTTP-bearbetningsarbete. Observera att denna kurs använder Http.sys systemkomponenter för att utföra jobbet, så den kan endast användas på Windows XPSP2 eller Server 2003 eller senare operativsystem.
HttpListener-klassen förenklar ytterligare lyssningsoperationen och behöver endast ange lyssningsadress, portnummer och virtuell väg genom strängmetoden för att påbörja lyssningsarbetet.
Efter att ha börjat lyssna blockerar GetContext-metoden tråden, när klientens begäran anländer, returnerar HttpListener ett HttpListenerContext-objekt som den allmänna proxyn för att hantera klientförfrågningar, genom Request-egenskapen för proxyobjektet kan vi få ett objekt av typen HttpListenerRequest som representerar begäranarparametrarna, detta objekt objektifierar de flesta begäranparameterna, så , kan vi få begäranparametrarna genom en serie egenskaper den tillhandahåller. Till exempel tillhandahåller egenskapen HttpMethod i HttpListenerRequest den metodtyp som efterfrågas. Genom proxyns attribut Response kan vi erhålla ett svarsbehandlingsobjekt av typen HttpListenerResponse, som kapslar in data och operationer för svaret, vilket avsevärt förenklar programmeringsarbetsbördan för svaret, och arbetsprocessen är följande:
//检查系统是否支持 om (! HttpListener.IsSupported)
{ kasta nytt System.InvalidOperationException( "För att använda HttpListener måste du ha Windows XP SP2 eller Server 2003 eller senare!" );
} Observera att prefixet måste sluta med ett / framåtriktat snedstreck sträng[] prefix = ny sträng[] { "http://localhost:49152/" }; Skapa en lyssnare. HttpListener listener = ny HttpListener(); Lägg till prefixet på skärmen. foreach (sträng s i prefix)
{ lyssnare. Prefix. Tillägg(er);
} Börja lyssna lyssnare. Start(); Console.WriteLine(" lyssnar..."); medan (sann)
{ Observera: GetContext-metoden blockerar tråden tills förfrågan anländer HttpListenerContext context = lyssnare. GetContext(); Hämta request-objektet HttpListenerRequest-begäran = kontext. Begäran; Console.WriteLine("{0} {1} HTTP/1.1", begäran. HttpMethod, begär. RawUrl); Console.WriteLine("Accept: {0}", sträng. Join(",", begäran. AcceptTypes)); Console.WriteLine("Accept-Language: {0}", Snöre. Join(",", begäran. UserLanguages)); Console.WriteLine("User-Agent: {0}", begäran. UserAgent); Console.WriteLine("Accept-Encoding: {0}", begäran. Headers["Accept-Encoding"]); Console.WriteLine("Anslutning: {0}", begäran. Behålla livet ? "Keep-Alive": "nära"); Console.WriteLine("Host: {0}", begäran. UserHostName); Console.WriteLine("Pragma: {0}", begäran. Rubriker["Pragma"]); Fånga responsmålet httpListenerResponse svar = kontext. Respons; Konstruera svarsinnehållet strängresponsSträng = @"<html> <head><title>Från HttpListener-servern</title></head> <body><h1>Hej världen.</h1></body> ";</html> Ställ in svarshuvudets innehåll, längd, kodning svar. ContentLength64 = System.Text.Encoding.UTF8.GetByteCount(responseString); svar. ContentType = "text/html; charset=UTF-8"; Utdata svar System.IO.Stream-utgång = svar. OutputStream; System.IO.StreamWriter writer = ny System.IO.StreamWriter (output); författare. Write(responseString); Utgångsströmmen måste stängas av författare. Close(); if (Console.KeyAvailable) paus;
} Stäng ner servern lyssnare. Stop();
När man använder HttpListener blir vanliga förfrågnings- och svarsparametrar objektegenskaper, vilket kraftigt minskar programmeringsarbetsbördan. De flesta parametrar måste dock fortfarande nås via Headers-indexern, precis som Accept-Encoding-request-parametern i exemplet ovan, som vi inte kan komma åt direkt via egenskaperna. |
Föregående:CSS-filer och js-filer följs av ett frågeteckenNästa:Dagen har börjat!! Kom igen, allihop
|