Cet article est un article miroir de traduction automatique, veuillez cliquer ici pour accéder à l’article original.

Vue: 19293|Répondre: 0

[Source] .net utilise HttpListener pour écouter le contenu et utilise des threads pour répondre aux utilisateurs afin d’éviter le blocage

[Copié le lien]
Publié sur 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.         }
Code de copie






Précédent:HttpListener reçoit la demande de publication
Prochain:S’il y a un retour, essayez de capturer enfin l’ordre d’exécution
Démenti:
Tous les logiciels, supports de programmation ou articles publiés par Code Farmer Network sont uniquement destinés à l’apprentissage et à la recherche ; Le contenu ci-dessus ne doit pas être utilisé à des fins commerciales ou illégales, sinon les utilisateurs assumeront toutes les conséquences. Les informations sur ce site proviennent d’Internet, et les litiges de droits d’auteur n’ont rien à voir avec ce site. Vous devez supprimer complètement le contenu ci-dessus de votre ordinateur dans les 24 heures suivant le téléchargement. Si vous aimez le programme, merci de soutenir un logiciel authentique, d’acheter l’immatriculation et d’obtenir de meilleurs services authentiques. En cas d’infraction, veuillez nous contacter par e-mail.

Mail To:help@itsvse.com