Aby jeszcze bardziej uprościć słuchaczy protokołu HTTP, . .NET udostępnia klasę HttpListener w przestrzeni nazw System.Net. Towarzyszący temu obiektowi jest . .NET oferuje szereg powiązanych obiektów, które enkapsulują pracę przetwarzania HTTP. Należy zauważyć, że ta klasa wykorzystuje Http.sys komponenty systemowe do wykonania zadania, więc może być używana tylko na systemach Windows XPSP2 lub Server 2003 lub nowszych.
Klasa HttpListener dodatkowo upraszcza operację nasłuchu i musi jedynie podać adres nasłuchu, numer portu oraz wirtualną ścieżkę przez metodę stringową, aby rozpocząć pracę odsłuchu.
Po rozpoczęciu odsłuchu metoda GetContext zablokuje wątek, a gdy przyjdzie żądanie klienta, HttpListener zwraca obiekt HttpListenerContext jako ogólny proxy do przetwarzania żądań klienta, poprzez właściwość Request obiektu proxy możemy uzyskać obiekt typu HttpListenerRequest reprezentujący parametry żądania, ten obiekt uprzedmiotowuje większość parametrów żądania, więc , możemy uzyskać parametry żądania za pomocą serii właściwości, które ona zapewnia. Na przykład właściwość HttpMethod w HttpListenerRequest podaje żądany typ metody. Dzięki atrybutowi Response proxy'a możemy uzyskać obiekt przetwarzania odpowiedzi typu HttpListenerResponse, który zawiera dane i operacje odpowiedzi, co znacznie upraszcza obciążenie programistyczne odpowiedzi, a proces pracy wygląda następująco:
//检查系统是否支持 jeśli (! HttpListener.IsSupported)
{ throw new System.InvalidOperationException( "Aby korzystać z HttpListener, musisz mieć Windows XP SP2 lub Server 2003 lub nowszy!" );
} Należy zauważyć, że przedrostek musi kończyć się ukośnikiem / do przodu prefiksy string[] = nowy string[] { "http://localhost:49152/" }; Stwórz słuchacza. Słuchacz HttpListener = nowy HttpListener(); Dodaj prefiks monitora. foreach (ciąg S w przedrostkach)
{ słuchacz. Prefiksy.add(s);
} Zacznij słuchać słuchacz. Start(); Console.WriteLine(""słuchanie..."); podczas gdy (prawdziwe)
{ Uwaga: Metoda GetContext zablokuje wątek do czasu nadejścia żądania HttpListenerContext context = listener. GetContext(); Pobierz obiekt żądania HttpListenerRequest request = kontekst. Prośba; Console.WriteLine("{0} {1} HTTP/1.1", żądanie. HttpMethod, prośba. RawUrl); Console.WriteLine("Zaakceptuj: {0}", string. Dołącz (",", prośba. AcceptTypes)); Console.WriteLine("Accept-Language: {0}", Nity. Dołącz (",", prośba. UserLanguages)); Console.WriteLine("User-Agent: {0}", request. UserAgent); Console.WriteLine("Accept-Encoding: {0}", żądanie. nagłówki["Accept-Encoding"]); Console.WriteLine("Połączenie: {0}", prośba. Zachowaj życie? "Keep-Alive" : "blisko"); Console.WriteLine("Host: {0}"), request. UserHostName); Console.WriteLine("Pragma: {0}", prośba. nagłówki["Pragma"]); Zdobądź cel odpowiedzi HttpListenerResponse response = kontekst. Odpowiedź; Skonstruuj treść odpowiedzi odpowiedź ciągu = @"<html> <head><title>Z serwera HttpListener</title></head> <body><h1>Cześć ludzie.</h1></body> ";</html> Ustaw zawartość nagłówka odpowiedzi, długość i kodowanie odpowiedź. ContentLength64 = System.Text.Encoding.UTF8.GetByteCount(responseString); odpowiedź. ContentType = "tekst/html; charset=UTF-8"; Odpowiedzi wyjściowe System.IO.Stream output = odpowiedź. OutputStream; System.IO.StreamWriter writer = nowy System.IO.StreamWriter(output); pisarz. Write(responseString); Strumień wyjściowy musi być wyłączony pisarz. Close(); if (Console.KeyAvailable) przerwę;
} Wyłącz serwer słuchacz. Stop();
Podczas korzystania z HttpListener często używane parametry żądań i odpowiedzi stają się właściwościami obiektowymi, co znacznie zmniejsza obciążenie programistyczne. Jednak większość parametrów nadal wymaga dostępu przez indeksator Headers, podobnie jak parametr żądania Accept-Encoding w powyższym przykładzie, do którego nie mamy bezpośredniego dostępu przez właściwości. |