zoukankan      html  css  js  c++  java
  • 简单的异步HTTP服务端和客户端

     /// <summary>
            /// 异步Http服务器
            /// </summary>
            class AsyncHttpServer
            {
                readonly HttpListener _listener;
                //相应信息
                const string RESPONSE_TEMPLATE = "<html><head><title>Test</title></head><body><h2>Test page</h2><h4>Today is: {0}</h4></body></html>";
    
                public AsyncHttpServer(int portNumber)
                {
                    _listener = new HttpListener();
                    _listener.Prefixes.Add(string.Format("http://+:{0}/", portNumber));
                }
    
                public async Task Start()
                {
                    _listener.Start();
    
                    while (true)
                    {
                        var ctx = await _listener.GetContextAsync();
                        Console.WriteLine("Client connected...");
                        var response = string.Format(RESPONSE_TEMPLATE, DateTime.Now);
    
                        using (var sw = new StreamWriter(ctx.Response.OutputStream))
                        {
                            await sw.WriteAsync(response);
                            await sw.FlushAsync();
                        }
                    }
                }
    
                public async Task Stop()
                {
                    _listener.Abort();
                }
            }
    

      

           /// <summary>
            /// 客户端获取响应信息
            /// </summary>
            /// <param name="url"></param>
            /// <returns></returns>
            static async Task GetResponseAsync(string url)
            {
                using (var client = new HttpClient())
                {
                    HttpResponseMessage responseMessage = await client.GetAsync(url);
                    string responseHeaders = responseMessage.Headers.ToString();
                    string response = await responseMessage.Content.ReadAsStringAsync();
    
                    Console.WriteLine("Response headers:");
                    Console.WriteLine(responseHeaders);
                    Console.WriteLine("Response body:");
                    Console.WriteLine(response);
                }
            }
    

    注: 以管理员身份运行程序

  • 相关阅读:
    c++ 内存管理
    socket粘包现象加解决办法
    TCP与UDP比较 以及并发编程基础知识
    进程之 Process join方法其他属性与进程Queue
    socket通讯实例与TCP/UDP的区别
    socket介绍
    python中的异常处理机制
    面向对象之多态,多态性,反射,以及基于反射的可拔插设计
    面向对象之元类介绍
    面向对象基础
  • 原文地址:https://www.cnblogs.com/zhangzhi19861216/p/5261384.html
Copyright © 2011-2022 走看看