Denne artikel er en spejling af maskinoversættelse, klik venligst her for at springe til den oprindelige artikel.

Udsigt: 19293|Svar: 0

[Kilde] .net bruger HttpListener til at lytte til indhold og bruger tråde til at svare brugere for at forhindre blokering

[Kopier link]
Opslået på 17/12/2015 12.28.28 | | |
  1. /// <summary>
  2.         /// 开启监听
  3.         /// </summary>
  4.         private void Init()
  5.         {
  6.             try
  7.             {
  8.                 //指定身份验证 Anonymous匿名访问
  9.                 listeren.AuthenticationSchemes = AuthenticationSchemes.Anonymous;
  10.                 //创建IP地址
  11.                 IPAddress address = IPAddress.Parse(Args.RunningArgs[0]);
  12.                 listeren.Prefixes.Add("http://" + address + ":" + Args.RunningArgs[1] + "/");
  13.                 listeren.Start();
  14.                 Thread threadlistener = new Thread(new ThreadStart(ThreadStartListener));
  15.                 threadlistener.IsBackground = true;
  16.                 threadlistener.Start();
  17.                 MessageBox.Show("监听成功");
  18.             }
  19.             catch (Exception ex)
  20.             {
  21.                 cfg.Logs.Add(new LogClass { LogStr = "HttpListener error", ExInfo = ex });
  22.             }
  23.         }
  24.         /// <summary>
  25.         /// 监听连接线程
  26.         /// </summary>
  27.         private void ThreadStartListener()
  28.         {
  29.             while (true)
  30.             {
  31.                 //int i = 0;
  32.                 // 注意: GetContext 方法将阻塞线程,直到请求到达
  33.                 HttpListenerContext context = listeren.GetContext();
  34.                 //接收到请求,用线程去处理,防止阻塞
  35.                 Thread subThread = new Thread(new ParameterizedThreadStart((currContext) =>
  36.                 {
  37.                     int i = 0;
  38.                     var request = (HttpListenerContext)currContext;
  39.                     try
  40.                     {
  41.                         //post请求
  42.                         if (request.Request.HttpMethod.ToLower().Equals("post"))
  43.                         {
  44.                             this.Dispatcher.Invoke(new Action(() =>
  45.                             {
  46.                                 try
  47.                                 {
  48.                                     i = 1;
  49.                                     string QRcode = PostInput(request.Request);
  50.                                     var data = Convert.FromBase64String(QRcode);
  51.                                     BitmapImage bmp = new BitmapImage();
  52.                                     bmp.BeginInit();
  53.                                     bmp.StreamSource = new MemoryStream(data);
  54.                                     bmp.EndInit();
  55.                                     codeimg.Source = bmp;
  56.                                     Writer("success", request);
  57.                                     return;
  58.                                 }
  59.                                 catch (Exception ex)
  60.                                 {
  61.                                     Writer("img_error", request);
  62.                                     cfg.Logs.Add(new LogClass { LogStr = "HttpListener error", ExInfo = ex });
  63.                                     return;
  64.                                 }
  65.                             }));
  66.                         }
  67.                         else if (request.Request.HttpMethod.ToLower().Equals("get"))//get请求
  68.                         {
  69.                             Writer("get", request);
  70.                             return;
  71.                         }
  72.                         if (i.Equals(0))
  73.                         {
  74.                             Writer("no", request);
  75.                             return;
  76.                         }
  77.                     }
  78.                     catch (Exception)
  79.                     {
  80.                         Writer("error", request);
  81.                         return;
  82.                     }
  83.                 }));
  84.                 subThread.Start(context);  

  85.             }
  86.         }
  87.         /// <summary>
  88.         /// HttpListener接收post请求
  89.         /// </summary>
  90.         /// <param name="request"></param>
  91.         /// <returns></returns>
  92.         private string PostInput(HttpListenerRequest request)
  93.         {
  94.             try
  95.             {
  96.                 System.IO.Stream s = request.InputStream;
  97.                 int count = 0;
  98.                 byte[] buffer = new byte[1024];
  99.                 StringBuilder builder = new StringBuilder();
  100.                 while ((count = s.Read(buffer, 0, 1024)) > 0)
  101.                 {
  102.                     builder.Append(Encoding.UTF8.GetString(buffer, 0, count));
  103.                 }
  104.                 s.Flush();
  105.                 s.Close();
  106.                 s.Dispose();
  107.                 return builder.ToString();
  108.             }
  109.             catch (Exception ex)
  110.             { throw ex; }
  111.         }
  112.         /// <summary>
  113.         /// 响应内容
  114.         /// </summary>
  115.         /// <param name="str"></param>
  116.         /// <param name="context"></param>
  117.         public void Writer(string str, HttpListenerContext context)
  118.         {
  119.             HttpListenerRequest request = context.Request;
  120.             HttpListenerResponse response = context.Response;
  121.             // 构造回应内容
  122.             string responseString = str;
  123.             // 设置回应头部内容,长度,编码
  124.             response.ContentLength64
  125.                 = System.Text.Encoding.UTF8.GetByteCount(responseString);
  126.             response.ContentType = "text/html; charset=UTF-8";
  127.             // 输出回应内容
  128.             System.IO.Stream output = response.OutputStream;
  129.             System.IO.StreamWriter writer = new System.IO.StreamWriter(output);
  130.             writer.Write(responseString);
  131.             // 必须关闭输出流
  132.             writer.Close();
  133.         }
Kopier kode






Tidligere:HttpListener modtager opslagsanmodningen
Næste:Hvis der er return, prøv til sidst at fange eksekveringsrækkefølgen
Ansvarsfraskrivelse:
Al software, programmeringsmaterialer eller artikler udgivet af Code Farmer Network er kun til lærings- og forskningsformål; Ovenstående indhold må ikke bruges til kommercielle eller ulovlige formål, ellers skal brugerne bære alle konsekvenser. Oplysningerne på dette site kommer fra internettet, og ophavsretstvister har intet med dette site at gøre. Du skal slette ovenstående indhold fuldstændigt fra din computer inden for 24 timer efter download. Hvis du kan lide programmet, så understøt venligst ægte software, køb registrering og få bedre ægte tjenester. Hvis der er nogen overtrædelse, bedes du kontakte os via e-mail.

Mail To:help@itsvse.com