2009-04-20 58 views
3

我正在將一個小型web服務器嵌入到我的程序中。 它相對簡單 - 只需要提供原始html文件和javascript。c中的Http庫#

我有一些異步網絡代碼可以用來獲得基本的管道。 但有沒有任何現成的庫可以理解http?

我只需要能夠解析http請求來提取路徑,查詢字符串,發佈變量並能夠相應地作出響應。

不需要SSL或cookie或認證。

我嘗試了幾個Web服務器庫,但不滿意,主要是因爲他們使用工作線程,使程序煩人的用戶界面進行交互。

理想情況下,我只想要一個庫,它將採取一些http請求字符串\流,並給我一個結構或對象。

回答

6

我認爲HttpListener可能會做你想做的。

編輯:(以防萬一添加的代碼示例)

這裏有一個小代碼來顯示如何可以(使用異步方法)使用它。

HttpListener _server = new HttpListener(); 

// add server prefix (this is just one sample) 
_server.Prefixes.Add("http://*:8080"); 

// start listening 
_server.Start(); 

// kick off the listening thread 
_Server.BeginGetContext(new AsyncCallback(ContextCallback), null); 

,然後在ContextCallback(IAsyncResult result)

// get the next request 
HttpListenerContext context = _server.EndGetContext(result); 

// write this method to inspect the context object 
// and do whatever logic you need 
HandleListenerContext(context); 

// is the server is still running, wait for the next request 
if (_Server.IsListening) 
{ 
    _server.BeginGetContext(new AsyncCallback(ServerThread), null); 
} 

看看HttpListenerContext的詳細信息,你必須提供給你什麼,但最主要的一個可能會是Request財產。

2

爲什麼不使用System.Net命名空間中的類?特別是HttpListener

+1

「此類僅在運行Windows XP SP2或Windows Server 2003操作系統的計算機上可用。」 – 2009-06-05 18:45:43