Lai vēl vairāk vienkāršotu HTTP protokola klausītājus, . .NET nodrošina HttpListener klasi nosaukumvietas System.Net. Kopā ar šo objektu, . .NET nodrošina virkni saistītu objektu, kas ietver HTTP apstrādes darbu. Ņemiet vērā, ka šī klase izmanto Http.sys sistēmas komponentus, lai paveiktu darbu, tāpēc to var izmantot tikai operētājsistēmās Windows XPSP2 vai Server 2003 vai jaunākās operētājsistēmās.
Klase HttpListener vēl vairāk vienkāršo klausīšanās darbību, un, lai sāktu klausīšanās darbu, ir jānorāda tikai klausīšanās adrese, porta numurs un virtuālais ceļš, izmantojot virknes metodi.
Pēc klausīšanās sākšanas GetContext metode bloķēs pavedienu, kad klienta pieprasījums pienāks, HttpListener atgriež HttpListenerContext objektu kā vispārējo starpniekserveri klienta pieprasījumu apstrādei, izmantojot starpniekservera objekta rekvizītu Request, mēs varam iegūt HttpListenerRequest tipa objektu, kas pārstāv pieprasījuma parametrus, šis objekts objektizē lielāko daļu pieprasījuma parametru, tāpēc , mēs varam iegūt pieprasījuma parametrus, izmantojot virkni tā nodrošināto rekvizītu. Piemēram, rekvizīts HttpListenerRequest nodrošina pieprasīto metodes tipu. Izmantojot starpniekservera atribūtu Response, mēs varam iegūt atbildes apstrādes objektu ar tipu HttpListenerResponse, kas ietver atbildes datus un darbības, kas ievērojami vienkāršo atbildes programmēšanas darba slodzi, un darba process ir šāds:
//检查系统是否支持 ja (! HttpListener.IsSupported)
{ mest jaunu System.InvalidOperationException( "Lai izmantotu HttpListener, datorā jābūt Windows XP SP2 vai Server 2003 vai jaunākai versijai!" );
} Ņemiet vērā, ka prefiksam jābeidzas ar slīpsvītru string[] prefiksi = jauna virkne[] { "http://localhost:49152/" }; Izveidojiet klausītāju. HttpListener klausītājs = jauns HttpListener(); Pievienojiet monitora prefiksu. foreach (virkne s prefiksos)
{ klausītājs. Prefiksi.Pievienot(-i);
} Sāciet klausīties klausītājs. Sākums(); Console.WriteLine(" klausās..."); kamēr (patiess)
{ Piezīmes: GetContext metode bloķēs pavedienu, līdz pieprasījums pienāks HttpListenerContext context = klausītājs. GetContext(); Saņemt pieprasījuma objektu HttpListenerRequest pieprasījums = konteksts. Pieprasījums; Console.WriteLine("{0} {1} HTTP/1.1", pieprasījums. HttpMethod, pieprasījums. RawUrl); Console.WriteLine("Akceptēt: {0}", virkne. Pievienoties(",", pieprasījums. AcceptTypes)); Console.WriteLine("Akceptēšanas valoda: {0}", virkne. Pievienoties(",", pieprasījums. UserLanguages)); Console.WriteLine("Lietotāja aģents: {0}", pieprasījums. Lietotāja aģents); Console.WriteLine("Akceptēt-kodējums: {0}", pieprasījums. galvenes["akceptēšana-kodēšana"]); Console.WriteLine("Savienojums: {0}", pieprasījums. KeepAliv e ? "Keep Alive" : "aizvērt"); Console.WriteLine("Resursdators: {0}", pieprasījums. UserHostName); Console.WriteLine("Pragma: {0}", pieprasījums. Galvenes["Pragma"]); Atbildes mērķa iegūšana HttpListenerResponse atbilde = konteksts. Atbilde; Atbildes satura veidošana virknes responseString = @"<html> <head><title>No HttpListener servera</title></head> <body><h1>sveika, pasaule.</h1></body> ";</html> Atbildes galvenes satura, garuma, kodējuma iestatīšana atbilde. Satura garums64 = System.Text.Encoding.UTF8.GetByteCount(responseString); atbilde. ContentType = "teksts/html; rakstzīmju kopa=UTF-8"; Izvades atbildes System.IO.Stream izeja = atbilde. Izejas plūsma; System.IO.StreamWriter rakstītājs = jauns System.IO.StreamWriter(izvade); rakstnieks. Write(atbildes virkne); Izvades plūsmai jābūt izslēgtai rakstnieks. Aizvērt (); if (Console.KeyAvailable) pārtraukums;
} Servera izslēgšana klausītājs. Stop();
Izmantojot HttpListener, bieži izmantotie pieprasījuma un atbildes parametri kļūst par objekta rekvizītiem, kas ievērojami samazina programmēšanas darba slodzi. Tomēr lielākajai daļai parametru joprojām ir jāpiekļūst, izmantojot galvenes indeksētāju, tāpat kā iepriekš minētajā piemērā redzamais pieprasījuma parametrs Accept-Encoding, kuram mēs nevaram piekļūt tieši, izmantojot rekvizītus. |