Pro další zjednodušení posluchačů pro HTTP protokol, . .NET poskytuje třídu HttpListener v jmenném prostoru System.Net. Doprovázející tento objekt, . .NET poskytuje řadu souvisejících objektů, které zapouzdřují práci s HTTP zpracováním. Všimněte si, že tato třída používá Http.sys systémové komponenty k vykonání své práce, takže ji lze použít pouze na operačních systémech Windows XPSP2 nebo Server 2003 či novějších.
Třída HttpListener dále zjednodušuje operaci poslechu a stačí poskytnout poslechovou adresu, číslo portu a virtuální cestu metodou řetězce, aby mohla začít poslechovou práci.
Po zahájení poslechu metoda GetContext zablokuje vlákno, když dorazí požadavek klienta, HttpListener vrátí objekt HttpListenerContext jako obecný proxy pro zpracování klientských požadavků, prostřednictvím vlastnosti Request v proxy objektu můžeme získat objekt typu HttpListenerRequest reprezentující parametry požadavku, tento objekt objektivizuje většinu parametrů požadavku, takže , parametry požadavku můžeme získat pomocí řady vlastností, které poskytuje. Například vlastnost HttpMethod v HttpListenerRequest poskytuje požadovaný typ metody. Pomocí atributu Response v proxy můžeme získat objekt pro zpracování odpovědí typu HttpListenerResponse, který zapouzdřuje data a operace odpovědi, což výrazně zjednodušuje programovací zátěž odpovědi, a pracovní proces je následující:
//检查系统是否支持 pokud (! HttpListener.IsSupported)
{ throw nový System.InvalidOperationException( "Pro použití HttpListeneru musíte mít Windows XP SP2 nebo Server 2003 či novší!" );
} Všimněte si, že předpona musí končit na / dopředu předpony řetězce[] = nový řetězec[] { "http://localhost:49152/" }; Vytvořte si posluchače. HttpListener listener = nový HttpListener(); Přidejte předponu monitoru. foreach (řetězec s v předponázích)
{ posluchač. Prefixes.Add(s);
} Začněte poslouchat posluchač. Start(); Console.WriteLine(""poslouchání..."); zatímco (pravda)
{ Poznámka: Metoda GetContext zablokuje vlákno, dokud nedorazí požadavek HttpListenerContext context = posluchač. GetContext(); Získejte objekt požadavku HttpListenerRequest request = kontext. Žádost; Console.WriteLine("{0} {1} HTTP/1.1", požadavek. HttpMethod, žádost. RawUrl); Console.WriteLine("Přijmout: {0}", řetězec. Připojte se (",", žádost. AcceptTypes)); Console.WriteLine("Accept-Language: {0}", String. Připojte se (",", žádost. UserLanguages)); Console.WriteLine("User-Agent: {0}", požadavek. UserAgent); Console.WriteLine("Accept-Encoding: {0}", požadavek. hlavičky["Accept-Encoding"]); Console.WriteLine("Připojení: {0}", žádost. Udržet se v životě? "Keep-Alive" : "blízko"); Console.WriteLine("Host: {0}", požadavek. UserHostName); Console.WriteLine("Pragma: {0}", požadavek. Hlavičky["Pragma"]); Získejte cíl odpovědi HttpListenerResponse response = kontext. Odpověď; Sestavte obsah odpovědi string responseString = @"<html> <head><title>Z HttpListener serveru</title></head> <body><h1>Ahoj světe.</h1></body> ";</html> Nastavte obsah hlavičky odpovědi, délku, kódování odpověď. ContentLength64 = System.Text.Encoding.UTF8.GetByteCount(responseString); odpověď. ContentType = "text/html; charset=UTF-8"; Výstupní odezvy System.IO.Stream output = odpověď. OutputStream; System.IO.StreamWriter writer = nový System.IO.StreamWriter(output); spisovatel. Write(responseString); Výstupní proud musí být vypnutý spisovatel. Close(); if (Console.KeyAvailable) pauza;
} Vypněte server posluchač. Stop();
Při použití HttpListeneru se běžně používané parametry požadavků a odpovědí stávají objektovými vlastnostmi, což výrazně snižuje programátorskou zátěž. Většina parametrů však musí být stále přístupná přes indexer Headers, stejně jako parametr Accept-Encoding request v uvedeném příkladu, ke kterému nemáme přístup přímo přes vlastnosti. |