HttpListener 實現web服務器

1、使用方法html

1. Start()方法 容許此實例接受傳入的請求。即開始監聽瀏覽器

2. Stop()方法 處理完全部當前排隊的請求後關閉HttpListener對象服務器

3. GetContext()方法  等待傳入的請求接受到請求時返回 就如同上一篇的Socket實現服務器同樣 有一個Accept()方法他倆個差很少都是等待傳入的請求還有       一點就是GetContext()方法也會阻塞線程,當客戶端的請求到達時,返回一個HttpListenerContext對象,處理客戶端所發送過來的請求。
    4.1 Request 獲取表示客戶端資源的HttpListenerRequest對象。編碼

          4.1.1 AcceptType 獲取客戶端接受到的MIME類型。
    4.1.2 UserLanguages 獲取語言信息。
          4.1.3 UserAgent 獲取客戶端提供的用戶代理。
          4.1.4 Headers 獲取在請求中發送的標頭名稱/值對的集合 --->獲取HttpListenerRequest類沒有提供的一下屬性。

  4.2 Response 該屬性得到HttpListenerResponse對象,該對象將被髮送到客戶端以響應客戶端的請求。spa

    4.2.1 ContextLength64 獲取或設置響應中包括的正文數據的字節數。
          4.2.2 ContextType  獲取或設置返回內容的 MIME 類型。線程

經過流的方式將響應報文體的內容發送給客戶端瀏覽器。代理

2、源碼code

  public void SetWebServer()
        {
            //建立監聽器
            using (var httpListener = new HttpListener())
            {
                //監聽的路徑
                httpListener.Prefixes.Add("http://localhost:8889/");
                //設置匿名訪問
                httpListener.AuthenticationSchemes = AuthenticationSchemes.Anonymous;
                //開始監聽
                httpListener.Start();
                while (true)
                {
                    //等待傳入的請求接受到請求時返回,它將阻塞線程,直到請求到達
                    var context = httpListener.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;

                    // 設置迴應頭部內容,長度,編碼
                    response.ContentEncoding = Encoding.UTF8;
                    response.ContentType = "text/plain;charset=utf-8";

                    var path = @"C:\Users\youziku\Desktop\wendang\";
                    //訪問的文件名
                    var fileName = request.Url.LocalPath;

                    //讀取文件內容
                    var buff = File.ReadAllBytes(path + fileName);
                    response.ContentLength64 = buff.Length;

                    // 輸出迴應內容
                    System.IO.Stream output = response.OutputStream;
                    output.Write(buff, 0, buff.Length);
                    // 必須關閉輸出流
                    output.Close();
                }

            }
        }

來源:b̶i̶n̶g̶.̶    與 李二餅htm

相關文章
相關標籤/搜索