Et kuulajat Http protokolli jaoks veelgi lihtsustada, pakub .net meile HttpListener klassi, mis (System.Net nimeruumiga) kapseldab .net hulga ülesandeid, mis haldavad Http protokolli.
Vaatame esmalt MSDN-i definitsiooni:
Märkus: See klass on uus .NET Frameworki versioonis 2.0.
Pakub lihtsat, programmeeritavat ja juhitavat HTTP-protokolli kuulajat. Sellist klassi on võimatu pärida.
Kasutus:
avalik suletud klass HttpListener : IDisposable Märkus: Seda klassi saab kasutada ainult Win xp või Win Server 2003 või uuematel operatsioonisüsteemidel, kuna see klass peab töö tegemiseks kasutama Http.sys süsteemikomponente. Seetõttu peaksid esmalt hindama, kas see klass on toetatud, enne kui kasutad seda
- / 检查系统是否支持
- if (!HttpListener.IsSupported)
- {
- throw new System.InvalidOperationException(
- "使用 HttpListener 必须为 Windows XP SP2 或 Server 2003 以上系统!");
- }
Kopeeri kood 2. Start() meetod võimaldab sellel instantsil vastu võtta saabuvaid päringuid. Kuula kohe
3. Stop() meetod sulgeb HttpListeneri objekti pärast kõigi hetkel järjekorras olevate päringute töötlemist
4. GetContext() meetod ootab, kuni saabuv päring tagastatakse, kui ta päringu vastu võtab Nagu eelnevas artiklis mainitud Socket rakendusserveris, on olemas Accept() meetod, mis mõlemad peaaegu ootavad saabuvaid päringuid, ning GetContext() meetod blokeerib samuti lõime ning kui kliendi päring saabub, tagastab see HttpListenerContext objekti, mis töötleb kliendi saadetud päringut. 4.1 Päring Hangi HttpListenerRequest objekt, mis esindab kliendiressurssi.
4.1.1 AcceptType Saab kliendi poolt aktsepteeritud MIME tüübi. 4.1.2 Kasutajakeeled Hangi keeleinfot. 4.1.3 UserAgent hangib kliendi poolt pakutava kasutajaagendi. 4.1.4 Päised Hangi päringus päise nime/väärtuse paaride kogum, ---> saada omadus, mida HttpListenerRequest klass ei paku.
4.2 Vastus See omadus saab HttpListenerResponse objekti, mis saadetakse kliendile kliendi soovile vastuseks.
4.2.1 ContextLength64 Saab või määrab vastuses sisalduvate kehaandmete baitide arvu. 4.2.2 ContextType Saab või määrab tagastatud sisu MIME tüübi.
Vastuse sõnumi sisu saadetakse kliendi brauserisse voogedastuse teel.
- //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
Kopeeri kood
|