For å forenkle lyttere for HTTP-protokollen ytterligere, . .NET tilbyr HttpListener-klassen i navnerommet System.Net. Som følger med dette objektet, . .NET tilbyr en serie relaterte objekter som kapsler inn HTTP-prosesseringsarbeid. Merk at denne klassen bruker Http.sys systemkomponenter for å få jobben gjort, så den kan kun brukes på Windows XPSP2 eller Server 2003 eller nyere operativsystemer.
HttpListener-klassen forenkler lytteoperasjonen ytterligere, og trenger bare å oppgi lytteadressen, portnummeret og den virtuelle stien gjennom strengmetoden for å starte lyttearbeidet.
Etter å ha startet lytting, vil GetContext-metoden blokkere tråden, når klientens forespørsel kommer, returnerer HttpListener et HttpListenerContext-objekt som generell proxy for behandling av klientforespørsler, gjennom Request-egenskapen til proxy-objektet kan vi få et objekt av typen HttpListenerRequest som representerer forespørselsparameterne, dette objektet objektiviserer de fleste forespørselsparameterne, så , kan vi hente forespørselsparametrene gjennom en serie egenskaper den gir. For eksempel gir HttpMethod-egenskapen til HttpListenerRequest metodetypen som forespørres. Gjennom Response-attributtet til proxyen kan vi få et responsbehandlingsobjekt av typen HttpListenerResponse, som kapsler inn dataene og operasjonene til svaret, noe som i stor grad forenkler programmeringsarbeidsmengden til svaret, og arbeidsprosessen er som følger:
//检查系统是否支持 hvis (! HttpListener.IsSupported)
{ kast nytt System.InvalidOperationException( "For å bruke HttpListener må du være på Windows XP SP2 eller Server 2003 eller nyere!" );
} Merk at prefikset må ende med en / fremover-skråstrek streng[] prefikser = ny streng[] { "http://localhost:49152/" }; Lag en lytter. HttpListener listener = ny HttpListener(); Legg til prefikset til skjermen. foreach (streng s i prefikser)
{ lytter. Prefikser.Add(s);
} Begynn å lytte lytter. Start(); Console.WriteLine(" lytter..."); mens (Sant)
{ Merk: GetContext-metoden blokkerer tråden til forespørselen kommer HttpListenerContext context = listener. GetContext(); Få forespørselsobjektet HttpListenerRequest-forespørsel = kontekst. Forespørsel; Console.WriteLine("{0} {1} HTTP/1.1", forespørsel. HttpMethod, forespørsel. RawUrl); Console.WriteLine("Accept: {0}", streng. Bli med(",", forespørsel. AcceptTypes)); Console.WriteLine("Accept-Language: {0}", Streng. Bli med(",", forespørsel. UserLanguages)); Console.WriteLine("User-Agent: {0}", forespørsel. UserAgent); Console.WriteLine("Accept-Encoding: {0}", forespørsel. headers["Accept-Encodering"]); Console.WriteLine("Connection: {0}", forespørsel. Beholde livet ? "Keep-Alive": "nær"); Console.WriteLine("Host: {0}", forespørsel. UserHostName); Console.WriteLine("Pragma: {0}", forespørsel. overskrifter["Pragma"]); Få responsmålet HttpListenerResponse svar = kontekst. Respons; Konstruer svarinnholdet strengresponsStreng = @"<html> <head><title>Fra HttpListener-serveren</title></head> <body><h1>hallo verden.</h1></body> ";</html> Sett innholdet, lengden, kodingen i svarheaderen respons. InnholdLengde64 = System.Text.Encoding.UTF8.GetByteCount(responseString); respons. ContentType = "text/html; charset=UTF-8"; Utdataresponser System.IO.Stream-utgang = respons. OutputStream; System.IO.StreamWriter writer = ny System.IO.StreamWriter (output); forfatter. Write(responseString); Utgangsstrømmen må slås av forfatter. Close(); hvis (Console.KeyAvailable) pause;
} Steng serveren lytter. Stop();
Når man bruker HttpListener, blir vanlige forespørsels- og svarparametere objektegenskaper, noe som i stor grad reduserer programmeringsarbeidsmengden. De fleste parameterne må imidlertid fortsatt nås gjennom Headers-indekseren, akkurat som Accept-Encoding-forespørselsparameteren i eksempelet over, som vi ikke kan få tilgang til direkte gjennom egenskapene. |