自己實現簡單Web伺服器,支援GET POST請求

2021-09-06 17:06:05 字數 2901 閱讀 5769

最近專案上遇到乙個需求,最後想到的解決方案是自己實現乙個web伺服器去處理請求,然後再將資訊傳送到另外乙個程式。然後返回處理之後的結果呈現出來。

現在我就來分享一下如何實現的。

通過.net 為我們提供的httplistener類實現對http協議的處理,實現簡單的web伺服器。

注意:此類在 .net framework 2.0 版中是新增的。所以支援.net framework 2.0以上版本。該類僅在執行 windows xp sp2 或 windows server 2003 作業系統的計算機上可用。

引用命名空間:using system.net;

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

建立乙個http偵聽器物件並初始化

開始偵聽來自客戶端的請求

處理客戶端的http請求

關閉http偵聽器

建立乙個http偵聽器物件

建立http偵聽器物件只需要新建乙個httplistener物件即可。

初始化需要經過如下兩步

新增需要監聽的url範圍至listener.prefixes中,可以通過如下函式實現:

1

listener.prefixes.add("")    //必須以'/'結尾

多個的話可以採用迴圈新增。

呼叫listener.start()實現埠的繫結,並開始監聽客戶端的需求。

偵聽來自客戶端的請求

這裡有2種方式可以偵聽http請求,獲取httplistenercontext的最簡單方式如下:

該方法將阻塞呼叫函式至接收到乙個客戶端請求為止,如果要提高響應速度,可使用非同步方法listener.begingetcontext()來實現httplistenercontext物件的獲取。

我使用的是非同步方式實現對httplistenercontext物件的獲取。

處理客戶端的http請求

獲取httplistenercontext後,可通過request屬性獲取表示客戶端請求的物件,通過response屬性取表示 httplistener 將要傳送到客戶端的響應的物件。

關閉http偵聽器

通過呼叫listener.stop()函式即可關閉偵聽器,並釋放相關資源

實現get post請求處理

get請求比較簡單,直接通過 request.querystring["linezero"]; querystring就可以實現獲取引數。

post請求由於httplistener 不提供實現,需要自己做處理。在下面相關**中會貼出方法。

相關**:

using system;

using system.collections.generic;

using system.linq;

using system.text;

using system.net;

using system.io;

namespace webconsole

static void getcontextcallback(iasyncresult ar)

catch

}/// /// 處理輸入引數

//post請求處理

stream sourcestream = request.inputstream;

byte currentchunk = readlineasbytes(sourcestream);

//獲取資料中有空白符需要去掉,輸出的就是post請求的引數字串 如:username=linezero

temp = encoding.default.getstring(currentchunk).replace("", "");

}

return temp;

}static byte readlineasbytes(stream sourcestream)

resultstream.position = 0;

byte databytes = new byte[resultstream.length];

resultstream.read(databytes, 0, databytes.length);

return databytes;

}/// /// 輸出方法

///

/// response物件

/// 輸出值

/// 輸出型別預設為json}}

最後啟動程式,在位址列裡輸入 就可以訪問了。

自己實現簡單Web伺服器,支援GET POST請求

最近專案上遇到乙個需求,最後想到的解決方案是自己實現乙個web伺服器去處理請求,然後再將資訊傳送到另外乙個程式。然後返回處理之後的結果呈現出來。現在我就來分享一下如何實現的。通過.net 為我們提供的httplistener類實現對http協議的處理,實現簡單的web伺服器。注意 此類在 net f...

自己實現簡單Web伺服器,支援GET POST請求

最近專案上遇到乙個需求,最後想到的解決方案是自己實現乙個web伺服器去處理請求,然後再將資訊傳送到另外乙個程式。然後返回處理之後的結果呈現出來。現在我就來分享一下如何實現的。通過.net 為我們提供的httplistener類實現對http協議的處理,實現簡單的web伺服器。注意 此類在 net f...

web伺服器 簡單web伺服器實現

三次握手 一般情況下是瀏覽器先傳送請求資料,c s ack 應答 三次握手成功後,才開始進行通訊資料的收發。四次揮手 一般情況下是客戶端先關閉,給瀏覽器傳送關閉資訊。如果瀏覽器傳送了關閉資訊,但是伺服器沒有回過去,較慢 那麼瀏覽器一直發是不是就會有問題?所以會等待 2msl的時間。一般為2 5分鐘。...