通過HttpListener實現簡單的Http服務

HttpListener提供一個簡單的、可通過編程方式控制的 HTTP 協議偵聽器。通過它可以很容易的提供一些Http服務,而無需啓動IIS這類大型服務程序。

注意:該類僅在運行 Windows XP SP2 或 Windows Server 2003 操作系統的計算機上可用。

使用Http服務一般步驟如下:

  1. 創建一個HTTP偵聽器對象並初始化
  2. 添加需要監聽的URI 前綴
  3. 開始偵聽來自客戶端的請求
  4. 處理客戶端的Http請求
  5. 關閉HTTP偵聽器

其中3,4兩步可以循環處理,以提供多客戶多次請求的服務。

創建一個HTTP偵聽器對象

創建HTTP偵聽器對象只需要新建一個HttpListener對象即可。

HttpListener listener = new HttpListener();

初始化需要經過如下兩步

  1. 添加需要監聽的URL範圍至listener.Prefixes中,可以通過如下函數實現:
    listener.Prefixes.Add(prefix)    //prefix必須以'/'結尾
  2. 調用listener.Start()實現端口的綁定,並開始監聽客戶端的需求。

接受HTTP請求

在.net2.0中,通過HttpListenerContext對象提供對HttpListener類使用的請求和響應對象的訪問。

獲取HttpListenerContext的最簡單方式如下:

HttpListenerContext context = listener.GetContext();

該方法將阻塞調用函數至接收到一個客戶端請求爲止,如果要提高響應速度,可使用異步方法listener.BeginGetContext()來實現HttpListenerContext對象的獲取。

處理HTTP請求

獲取HttpListenerContext後,可通過Request屬性獲取表示客戶端請求的對象,通過Response屬性取表示 HttpListener 將要發送到客戶端的響應的對象。

HttpListenerRequest request = context.Request;
HttpListenerResponse response = context.Response;

這裏的HttpListenerRequest對象和HttpListenerResponse對象和Asp中的RequestResponse的使用方式類似,這裏就不多說了,具體的使用可以參看下面的例子。

關閉HTTP偵聽器

通過調用listener.Stop()函數即可關閉偵聽器,並釋放相關資源

代碼示例:

using System;
using System.Collections.Generic;
using System.Text;

using System.Net;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            HttpListener listener = new HttpListener();
            listener.Prefixes.Add("http://localhost/"); //
添加需要監聽的url範圍
            listener.Start(); //開始監聽端口,接收客戶端請求
            Console.WriteLine("Listening...");

            //
阻塞主函數至接收到一個客戶端請求爲止
            HttpListenerContext context = listener.GetContext();
            HttpListenerRequest request = context.Request;
            HttpListenerResponse response = context.Response;

            string responseString = string.Format("<HTML><BODY> {0}</BODY></HTML>", DateTime.Now);
            byte[] buffer = System.Text.Encoding.UTF8.GetBytes(responseString);
            //
對客戶端輸出相應信息.
            response.ContentLength64 = buffer.Length;
            System.IO.Stream output = response.OutputStream;
            output.Write(buffer, 0, buffer.Length);
            //
關閉輸出流,釋放相應資源
            output.Close();

            listener.Stop(); //
關閉HttpListener
        }
    }
}

該程序功能比較簡單,首先創建了一個HTTP偵聽器,使其實現對"http://localhost/time/"域的服務,接收到一個遠程請求時,將當前時間轉換爲字符串輸出給客戶端,然後關閉偵聽器。

發佈了28 篇原創文章 · 獲贊 1 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章