|
|
Postitatud 21.12.2015 11:00:26
|
|
|

Et kuulajaid veelgi lihtsustada HTTP protokolli jaoks, . .NET pakub HttpListener klassi nimeruumis System.Net. Selle objektiga kaasneb . .NET pakub rea seotud objekte, mis kapseldavad HTTP-töötlustööd. Pane tähele, et see klass kasutab Http.sys süsteemikomponente töö tegemiseks, seega saab seda kasutada ainult Windows XPSP2 või Server 2003 või uuematel operatsioonisüsteemidel.
HttpListener klass lihtsustab kuulamistoimingut veelgi ning kuulamistöö alustamiseks tuleb esitada ainult kuulamisaadress, pordi number ja virtuaalne tee stringimeetodi kaudu.
Pärast kuulamise alustamist blokeerib GetContext meetod lõime, kui kliendi päring saabub, tagastab HttpListener HttpListenerContext objekti üldise proksina kliendipäringute töötlemiseks, proksiobjekti Request omaduse kaudu saame objekti tüübiga HttpListenerRequest, mis esindab päringuparameetreid, see objekt objektistab enamiku päringuparameetritest, seega , saame päringuparameetrid läbi mitmete omaduste, mida see pakub. Näiteks HttpListenerRequest HttpMethod omadus annab soovitud meetoditüübi. Proxy Response atribuudi kaudu saame vastusetöötlusobjekti tüübiga HttpListenerResponse, mis kapseldab vastuse andmed ja toimingud, lihtsustades oluliselt vastuse programmeerimiskoormust, ning tööprotsess on järgmine:
//检查系统是否支持 kui (! httpListener.IsSupported)
{ throw new System.InvalidOperationException( "HttpListeneri kasutamiseks pead olema Windows XP SP2 või Server 2003 või uuem!" );
} Pane tähele, et eesliide peab lõppema / ettepoole kaldkriipsuga string[] eesliited = uus string[] { "http://localhost:49152/" }; Loo kuulaja. HttpListener kuulaja = uus HttpListener(); Lisa monitori eesliide. foreach (string s eesliidetes)
{ kuulaja. Prefiks.Add(s);
} Alusta kuulamist kuulaja. Start(); Console.WriteLine("kuulamine..."); samal ajal (tõene)
{ Märkus: GetContext meetod blokeerib lõime kuni päringu saabumiseni HttpListenerContext = kuulaja. GetContext(); Hangi taotlusobjekt HttpListenerRequest request = kontekst. Taotlus; Console.WriteLine("{0} {1} HTTP/1.1", request. HttpMethod, taotlus. RawUrl); Console.WriteLine("Accept: {0}", string. Liitu(",", taotlus. AcceptTypes)); Console.WriteLine("Aktsepteerimiskeel: {0}", Nöör. Liitu(",", taotlus. UserLanguages)); Console.WriteLine("User-Agent: {0}", päring. UserAgent); Console.WriteLine("Accept-Encoding: {0}", taotlus. päised["Accept-Encoding"]); Console.WriteLine("Ühendus: {0}", Palve. KeepAliv e ? "Hoia elus" : "lähedal"); Console.WriteLine("Host: {0}", request. UserHostName); Console.WriteLine("Pragma: {0}", request. Päised ["Pragma"]); Hangi vastuse sihtmärk HttpListenerResponse vastus = kontekst. Vastus; Koosta vastuse sisu string responseString = @"<html> <head><title>HttpListener serverist</title></head> <body><h1>Tere maailm.</h1></body> ";</html> Määra vastuse päise sisu, pikkus, kodeerimine vastus. ContentLength64 = System.Text.Encoding.UTF8.GetByteCount(responseString); vastus. ContentType = "tekst/html; charset=UTF-8"; Väljundvastused System.IO.Stream väljund = vastus. OutputStream; System.IO.StreamWriter writer = uus System.IO.StreamWriter(väljund); kirjanik. Write(responseString); Väljundvoog tuleb välja lülitada kirjanik. Close(); if (Console.KeyAvailable) paus;
} Sulge server kuulaja. Stop();
HttpListeneri kasutamisel muutuvad sageli kasutatavad päringu- ja vastusparameetrid objekti omadusteks, mis vähendab oluliselt programmeerimiskoormust. Siiski tuleb enamik parameetreid endiselt kasutada Headers indekseerija kaudu, nagu ka Accept-Encoding päringu parameetril ülaltoodud näites, millele me ei pääse otse omaduste kaudu ligi. |
Eelmine:CSS-failidele ja js-failidele järgneb küsimärkJärgmine:Päev on alanud!! Tulge, kõik
|