Um die Zuhörer für das HTTP-Protokoll weiter zu vereinfachen, gilt . .NET stellt die Klasse HttpListener im Namensraum System.Net bereit. Mit diesem Objekt verbunden ist . .NET bietet eine Reihe verwandter Objekte, die HTTP-Verarbeitungsarbeiten kapseln. Beachten Sie, dass diese Klasse Http.sys Systemkomponenten verwendet, um die Aufgabe zu erledigen, sodass sie nur auf Windows XPSP2- oder Server 2003- oder neueren Betriebssystemen verwendet werden kann.
Die Klasse HttpListener vereinfacht die Höroperation weiter und benötigt lediglich die Höradresse, die Portnummer und den virtuellen Pfad durch die String-Methode, um die Hörarbeit zu starten.
Nachdem das Zuhören begonnen hat, blockiert die Methode GetContext den Thread. Wenn die Client-Anfrage eintrifft, gibt HttpListener ein HttpListenerContext-Objekt als allgemeinen Proxy zur Verarbeitung von Client-Anfragen zurück. Über die Request-Eigenschaft des Proxy-Objekts können wir ein Objekt vom Typ HttpListenerRequest erhalten, das die Anfrageparameter repräsentiert. Dieses Objekt objektifiziert die meisten Anfrageparameter, also , können wir die Anfrageparameter durch eine Reihe von bereitgestellten Eigenschaften erhalten. Zum Beispiel liefert die Eigenschaft HttpMethod von HttpListenerRequest den angeforderten Methodentyp. Durch das Response-Attribut des Proxys können wir ein Response-Processing-Objekt vom Typ HttpListenerResponse erhalten, das die Daten und Operationen der Antwort kapselt, was die Programmierlast der Antwort erheblich vereinfacht, und der Arbeitsprozess ist wie folgt:
//检查系统是否支持 wenn (! HttpListener.IsSupported)
{ Throw new System.InvalidOperationException( "Um HttpListener zu nutzen, musst du Windows XP SP2 oder Server 2003 oder später nutzen!" );
} Beachte, dass das Präfix mit einem / forward slash enden muss string[] Präfixe = neue String[] { "http://localhost:49152/" }; Erstelle einen Zuhörer. HttpListener Listener = neuer HttpListener(); Füge das Präfix des Monitors hinzu. foreach (Zeichenkette s mit Präfixen)
{ Zuhörer. Präfixe.Add(s);
} Fang an zuzuhören Zuhörer. Start(); Console.WriteLine(" listening..."); während (wahr)
{ Hinweis: Die GetContext-Methode blockiert den Thread, bis die Anfrage eintrifft httpListenerContext context = Listener. GetContext(); Hol das Anfrageobjekt HttpListenerRequest-Anfrage = Kontext. Bitte; Console.WriteLine("{0} {1} HTTP/1.1", Anfrage. HttpMethod, Anfrage. RawUrl); Console.WriteLine("Accept: {0}", String. Join(",", Anfrage. AcceptTypes)); Console.WriteLine("Accept-Language: {0}", Schnur. Join(",", Anfrage. UserLanguages)); Console.WriteLine("User-Agent: {0}", Anfrage. UserAgent); Console.WriteLine("Accept-Encoding: {0}", Anfrage. Headers["Accept-Encoding"]); Console.WriteLine("Verbindung: {0}", Antrag. Bewahren Sie Leben? "Bleib am Leben": "nah"); Console.WriteLine("Host: {0}", Anfrage. UserHostName); Console.WriteLine("Pragma: {0}", Anfrage. Überschriften["Pragma"]); Erreiche das Antwortziel HttpListenerResponse Antwort = Kontext. Reaktion; Konstruiere den Antwortinhalt String-ResponseString = @"<html> <head><title>Vom HttpListener-Server</title></head> <body><h1>Hallo Welt.</h1></body> ";</html> Setze den Inhalt des Antwortheaders, Länge, Codierung Antwort. ContentLength64 = System.Text.Encoding.UTF8.GetByteCount(responseString); Antwort. ContentType = "text/html; charset=UTF-8"; Ausgabeantworten System.IO.Stream-Ausgabe = Antwort. OutputStream; System.IO.StreamWriter writer = neuer System.IO.StreamWriter (Ausgabe); Schriftsteller. Write(responseString); Der Ausgangsstrom muss abgeschaltet werden Schriftsteller. Close(); if (Console.KeyAvailable) Unterbrechung;
} Schalte den Server herunter Zuhörer. Stop();
Bei Verwendung von HttpListener werden häufig verwendete Anfrage- und Antwortparameter zu Objekteigenschaften, was die Programmierarbeit erheblich reduziert. Allerdings müssen die meisten Parameter weiterhin über den Headers-Indexer abgerufen werden, genau wie der Accept-Encoding-Request-Parameter im obigen Beispiel, den wir nicht direkt über die Eigenschaften erreichen können. |