最近專案上遇到乙個需求,最後想到的解決方案是自己實現乙個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物件即可。
httplistener listener = new httplistener();
初始化需要經過如下兩步
新增需要監聽的url範圍至listener.prefixes中,可以通過如下函式實現:
listener.prefixes.add("") //必須以'/'結尾
多個的話可以採用迴圈新增。
呼叫listener.start()實現埠的繫結,並開始監聽客戶端的需求。
偵聽來自客戶端的請求
這裡有2種方式可以偵聽http請求,獲取httplistenercontext的最簡單方式如下:
httplistenercontext context = listener.getcontext();
該方法將阻塞呼叫函式至接收到乙個客戶端請求為止,如果要提高響應速度,可使用非同步方法listener.begingetcontext()來實現httplistenercontext物件的獲取。
我使用的是非同步方式實現對httplistenercontext物件的獲取。
處理客戶端的http請求
獲取httplistenercontext後,可通過request屬性獲取表示客戶端請求的物件,通過response屬性取表示 httplistener 將要傳送到客戶端的響應的物件。
關閉http偵聽器
通過呼叫listener.stop()函式即可關閉偵聽器,並釋放相關資源
實現get post請求處理
get請求比較簡單,直接通過 request.querystring["linezero"]; querystring就可以實現獲取引數。
post請求由於httplistener 不提供實現,需要自己做處理。在下面相關**中會貼出方法。
相關**:
usingsystem;
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分鐘。...