For yderligere at forenkle lytterne for HTTP-protokollen, . .NET leverer HttpListener-klassen i navnerummet System.Net. Med dette objekt følger . .NET tilbyder en række relaterede objekter, der indkapsler HTTP-behandlingsarbejde. Bemærk, at denne klasse bruger Http.sys systemkomponenter til at udføre opgaven, så den kun kan bruges på Windows XPSP2 eller Server 2003 eller nyere operativsystemer.
HttpListener-klassen forenkler yderligere lytteoperationen og behøver kun at angive lytteadressen, portnummeret og den virtuelle sti gennem strengmetoden for at starte lyttearbejdet.
Efter at have begyndt at lytte, vil GetContext-metoden blokere tråden; når klientens anmodning ankommer, returnerer HttpListener et HttpListenerContext-objekt som den generelle proxy til behandling af klientanmodninger; gennem Request-egenskaben for proxyobjektet kan vi få et objekt af typen HttpListenerRequest, der repræsenterer anmodningsparametrene, dette objekt objektiviserer de fleste af anmodningsparametrene, så , kan vi få anmodningsparametrene gennem en række egenskaber, den giver. For eksempel angiver egenskaben HttpMethod i HttpListenerRequest den ønskede metodetype. Gennem Response-attributten på proxyen kan vi opnå et responsbehandlingsobjekt af typen HttpListenerResponse, som indkapsler dataene og operationerne i svaret, hvilket i høj grad forenkler programmeringsarbejdsbyrden for svaret, og arbejdsprocessen er som følger:
//检查系统是否支持 hvis (! HttpListener.IsSupported)
{ smid nyt System.InvalidOperationException( "For at bruge HttpListener skal du være på Windows XP SP2 eller Server 2003 eller nyere!" );
} Bemærk, at præfikset skal ende med en / fremadrettet skråstreg string[] præfikser = ny streng[] { "http://localhost:49152/" }; Skab en lytter. HttpListener lytter = ny HttpListener(); Tilføj skærmens præfiks. foreach (streng s i præfikser)
{ lytter. Præfikser.Tilføjelse(r);
} Begynd at lytte lytter. Start(); Console.WriteLine(" lytter..."); mens (sand)
{ Bemærk: GetContext-metoden vil blokere tråden, indtil anmodningen ankommer HttpListenerContext context = lytter. GetContext(); Få anmodningsobjektet HttpListenerRequest request = kontekst. Anmodning; Console.WriteLine("{0} {1} HTTP/1.1", forespørgsel. HttpMethod, anmoder. RawUrl); Console.WriteLine("Accepter: {0}", streng. Join(",", anmodning. AcceptTypes;; Console.WriteLine("Accept-Language: {0}", Snor. Join(",", anmodning. UserLanguages)); Console.WriteLine("User-Agent: {0}", anmodning. UserAgent); Console.WriteLine("Accept-Encoding: {0}", anmodning. Headers["Accept-Kodning"]); Console.WriteLine("Forbindelse: {0}", anmodning. KeepAliv e ? "Keep-Alive": "Close"); Console.WriteLine("Host: {0}", anmodning. UserHostName); Console.WriteLine("Pragma: {0}", anmodning. Headers["Pragma"]); Få responsmålet HttpListenerResponse svar = kontekst. Respons; Konstruer svarindholdet strengresponsStreng = @"<html> <head><title>Fra HttpListener Server</title></head> <body><h1>Hej verden.</h1></body> ";</html> Indstil svarets headerindhold, længde, kodning svar. ContentLength64 = System.Text.Encoding.UTF8.GetByteCount(responseString); svar. ContentType = "text/html; charset=UTF-8"; Outputresponser System.IO.Stream-output = respons. OutputStream; System.IO.StreamWriter writer = ny System.IO.StreamWriter(output); forfatter. Write(responseString); Udgangsstrømmen skal slukkes forfatter. Close(); hvis (Console.KeyAvailable) pause;
} Luk serveren ned lytter. Stop();
Når man bruger HttpListener, bliver almindeligt anvendte anmodnings- og svarparametre objektegenskaber, hvilket i høj grad reducerer programmeringsarbejdsbyrden. Dog skal de fleste parametre stadig tilgås via Headers-indekseren, ligesom Accept-Encoding-anmodningsparameteren i eksemplet ovenfor, som vi ikke kan få adgang til direkte gennem egenskaberne. |