Pentru a simplifica și mai mult ascultătorul protocolului Http, .net ne oferă clasa HttpListener, care (System.Net cu spațiul de nume) .net cuprinde o serie de sarcini ce gestionează protocolul Http.
Să aruncăm mai întâi o privire asupra definiției din MSDN:
Notă: Această clasă este nouă în versiunea 2.0 a .NET Framework.
Oferă un ascultător simplu, programabil și controlabil pentru protocolul HTTP. Este imposibil să moștenești o astfel de clasă.
Obicei:
clasă publică sigilată HttpListener : IDispositable Notă: Această clasă poate fi folosită doar pe sistemele de operare Win XP sau Windows Server 2003 sau ulterioare, deoarece această clasă trebuie să folosească Http.sys componente de sistem pentru a-și îndeplini sarcina. Prin urmare, ar trebui mai întâi să judeci dacă această clasă este suportată înainte de a o folosi
- / 检查系统是否支持
- if (!HttpListener.IsSupported)
- {
- throw new System.InvalidOperationException(
- "使用 HttpListener 必须为 Windows XP SP2 或 Server 2003 以上系统!");
- }
Cod de copiere 2. Metoda Start() permite acestei instanțe să accepte cererile primite. Ascultă imediat
3. Metoda Stop() închide obiectul HttpListener după procesarea tuturor cererilor puse în coadă
4. Metoda GetContext() așteaptă ca cererea primită să revină atunci când primește cererea. La fel ca serverul de implementare Socket din articolul anterior, există o metodă Accept(), ambele aproape așteptând cererile primite, iar metoda GetContext() va bloca de asemenea firul, iar când cererea clientului ajunge, va returna un obiect HttpListenerContext pentru a procesa cererea trimisă de client. 4.1 Cerere Obține obiectul HttpListenerRequest care reprezintă resursa clientului.
4.1.1 AcceptType obține tipul MIME acceptat de client. 4.1.2 LimbajeUtilizator Obține informații despre limbă. 4.1.3 UserAgent obține agentul utilizator furnizat de client. 4.1.4 Antete Primește o colecție de perechi nume/valoare de antet trimise într-o cerere ---> primești o proprietate care nu este oferită de clasa HttpListenerRequest.
4.2 Răspuns Această proprietate primește un obiect HttpListenerResponse, care va fi trimis clientului ca răspuns la cererea acestuia.
4.2.1 ContextLungime64 Primește sau setează numărul de octeți de date corporale incluse în răspuns. 4.2.2 ContextType Obține sau setează tipul MIME al conținutului returnat.
Conținutul corpului mesajului de răspuns este trimis către browserul client prin streaming.
- //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
Cod de copiere
|