Lai vēl vairāk vienkāršotu Http protokola klausītāju, .net nodrošina mums HttpListener klasi, kas (System.Net ar nosaukumvietu) .net ietver virkni uzdevumu, kas apstrādā Http protokolu.
Vispirms apskatīsim MSDN definīciju:
Piezīme: Šī klase ir jauna .NET Framework versijā 2.0.
Nodrošina vienkāršu, programmējamu un kontrolējamu HTTP protokola uztvērēju. Šādu klasi nav iespējams mantot.
Lietošanas:
publiski noslēgta klase HttpListener : IDisposable Piezīme: Šo klasi var izmantot tikai Win xp vai Win Server 2003 vai jaunākās operētājsistēmās, jo šai klasei ir jāizmanto Http.sys sistēmas komponenti, lai paveiktu darbu. Tāpēc vispirms jāspriež, vai šī klase tiek atbalstīta, pirms tās lietošanas
- / 检查系统是否支持
- if (!HttpListener.IsSupported)
- {
- throw new System.InvalidOperationException(
- "使用 HttpListener 必须为 Windows XP SP2 或 Server 2003 以上系统!");
- }
Kopēt kodu 2. Start() metode ļauj šai instancei pieņemt ienākošos pieprasījumus. Klausieties uzreiz
3. Stop() metode aizver HttpListener objektu pēc visu pašlaik rindā esošo pieprasījumu apstrādes
4. GetContext() metode gaida, līdz ienākošais pieprasījums atgriezīsies, kad tas saņem pieprasījumu Tāpat kā iepriekšējā rakstā Socket ieviešanas serveris, ir Accept() metode, kas abi gandrīz gaida ienākošos pieprasījumus, un GetContext() metode arī bloķēs pavedienu, un, kad klienta pieprasījums pienāks, tas atgriezīs HttpListenerContext objektu, lai apstrādātu klienta nosūtīto pieprasījumu. 4.1 Pieprasījums Iegūstiet objektu HttpListenerRequest, kas pārstāv klienta resursu.
4.1.1 AcceptType Iegūst klienta akceptēto MIME tipu. 4.1.2 UserLanguages Iegūt informāciju par valodu. 4.1.3 UserAgent iegūst klienta nodrošināto lietotāja aģentu. 4.1.4 Galvenes Iegūstiet galvenes nosaukumu/vērtību pāru kolekciju, kas nosūtīta pieprasījumā---> iegūtu rekvizītu, ko nenodrošina HttpListenerRequest klase.
4.2 Atbilde Šis rekvizīts saņem objektu HttpListenerResponse, kas tiks nosūtīts klientam, atbildot uz klienta pieprasījumu.
4.2.1 ContextLength64 Iegūst vai iestata atbildē iekļauto pamatdatu baitu skaitu. 4.2.2 ContextType Iegūst vai iestata atgrieztā satura MIME tipu.
Atbildes ziņojuma pamatteksta saturs tiek nosūtīts uz klienta pārlūkprogrammu straumēšanas veidā.
- //HTTP监听
- private HttpListener listeren = new HttpListener();
- #region 监听命令显示窗体
- /// <summary>
- /// 开启监听
- /// </summary>
- private void Init()
- {
- try
- {
- //指定身份验证 Anonymous匿名访问
- listeren.AuthenticationSchemes = AuthenticationSchemes.Anonymous;
- //创建IP地址
- IPAddress address = IPAddress.Parse(127.0.0.1);
- listeren.Prefixes.Add("http://" + address + ":30001/");
- listeren.Start();
- Thread threadlistener = new Thread(new ThreadStart(ThreadStartListener));
- threadlistener.Start();
- MessageBox.Show("监听成功");
- }
- catch (Exception ex)
- {
- cfg.Logs.Add(new LogClass { LogStr = "HttpListener error", ExInfo = ex });
- }
- }
-
- /// <summary>
- /// 监听连接线程
- /// </summary>
- private void ThreadStartListener()
- {
- try
- {
- while (true)
- {
- // 注意: GetContext 方法将阻塞线程,直到请求到达
- HttpListenerContext context = listeren.GetContext();
- // 取得请求对象
- HttpListenerRequest request = context.Request;
- Console.WriteLine("{0} {1} HTTP/1.1", request.HttpMethod, request.RawUrl);
- Console.WriteLine("Accept: {0}", string.Join(",", request.AcceptTypes));
- Console.WriteLine("Accept-Language: {0}",
- string.Join(",", request.UserLanguages));
- Console.WriteLine("User-Agent: {0}", request.UserAgent);
- Console.WriteLine("Accept-Encoding: {0}", request.Headers["Accept-Encoding"]);
- Console.WriteLine("Connection: {0}",
- request.KeepAlive ? "Keep-Alive" : "close");
- Console.WriteLine("Host: {0}", request.UserHostName);
- Console.WriteLine("Pragma: {0}", request.Headers["Pragma"]);
- // 取得回应对象
- HttpListenerResponse response = context.Response;
- // 构造回应内容
- string responseString
- = @"<html>
- <head><title>From HttpListener Server</title></head>
- <body><h1>Hello, 码农网(www.itsvse.com).</h1></body>
- </html>";
- // 设置回应头部内容,长度,编码
- response.ContentLength64
- = System.Text.Encoding.UTF8.GetByteCount(responseString);
- response.ContentType = "text/html; charset=UTF-8";
- // 输出回应内容
- System.IO.Stream output = response.OutputStream;
- System.IO.StreamWriter writer = new System.IO.StreamWriter(output);
- writer.Write(responseString);
- // 必须关闭输出流
- writer.Close();
- }
- }
- catch (Exception ex)
- {
- cfg.Logs.Add(new LogClass { LogStr = "HttpListener error", ExInfo = ex });
- }
- }
- #endregion
Kopēt kodu
|