前言
最近在學(xué)習(xí)網(wǎng)絡(luò)原理,突然萌發(fā)出自己實(shí)現(xiàn)一個(gè)網(wǎng)絡(luò)服務(wù)器的想法,并且由于第三代小白機(jī)器人的開發(fā)需要,我把之前使用python、PHP寫的那部分代碼都遷移到了C#(別問我為什么這么喜歡C#),之前使用PHP就是用來處理網(wǎng)絡(luò)請(qǐng)求的,現(xiàn)在遷移到C#了,而Linux系統(tǒng)上并沒有IIS服務(wù)器,自然不能使用ASP.Net,所以這個(gè)時(shí)候自己實(shí)現(xiàn)一個(gè)功能簡單的網(wǎng)絡(luò)服務(wù)器就恰到好處地解決這些問題了。
基本原理
Web Server在一個(gè)B/S架構(gòu)系統(tǒng)中起到的作用不僅多而且相當(dāng)重要,Web開發(fā)者大部分時(shí)候并不需要了解它的詳細(xì)工作機(jī)制。雖然不同的Web Server可能功能并不完全一樣,但是以下三個(gè)功能幾乎是所有Web Server必須具備的:
接收來自瀏覽器端的HTTP請(qǐng)求
將請(qǐng)求轉(zhuǎn)發(fā)給指定Web站點(diǎn)程序(后者由Web開發(fā)者編寫,負(fù)責(zé)處理請(qǐng)求)
向?yàn)g覽器發(fā)送請(qǐng)求處理結(jié)果
下圖顯示W(wǎng)eb Server在整個(gè)Web架構(gòu)系統(tǒng)中所處的重要位置:
如上圖,Web Server起到了一個(gè)“承上啟下”的作用(雖然并沒有“上下”之分),它負(fù)責(zé)連接用戶和Web站點(diǎn)。
每個(gè)網(wǎng)站就像一個(gè)個(gè)“插件”,只要網(wǎng)站開發(fā)過程中遵循了Web Server提出的規(guī)則,那么該網(wǎng)站就可以“插”在Web Server上,我們便可以通過瀏覽器訪問網(wǎng)站。
太長不看版原理
瀏覽器想要拿到哪個(gè)文件(html、css、js、image)就和服務(wù)器發(fā)請(qǐng)求信息說我要這個(gè)文件,然后服務(wù)器檢查請(qǐng)求合不合法,如果合法就把文件數(shù)據(jù)傳回給瀏覽器,這樣瀏覽器就可以把網(wǎng)站顯示出來了。(一個(gè)網(wǎng)站一般會(huì)包含n多個(gè)文件)
話不多說,直接上代碼
在C#中有兩種方法可以簡單實(shí)現(xiàn)Web服務(wù)器,分別是直接使用Socket和使用封裝好的HttpListener。
因?yàn)楹笳弑容^方便一些,所以我選擇使用后者。
這是最簡單的實(shí)現(xiàn)一個(gè)網(wǎng)絡(luò)服務(wù)器,可以處理瀏覽器發(fā)過來的請(qǐng)求,然后將指定的字符串內(nèi)容返回。
class Program { static void Main(string[] args) { string port = "8080"; HttpListener httpListener = new HttpListener(); httpListener.Prefixes.Add(string.Format("http://+:{0}/", port)); httpListener.Start(); httpListener.BeginGetContext(new AsyncCallback(GetContext), httpListener); //開始異步接收request請(qǐng)求 Console.WriteLine("監(jiān)聽端口:" + port); Console.Read(); } static void GetContext(IAsyncResult ar) { HttpListener httpListener = ar.AsyncState as HttpListener; HttpListenerContext context = httpListener.EndGetContext(ar); //接收到的請(qǐng)求context(一個(gè)環(huán)境封裝體) httpListener.BeginGetContext(new AsyncCallback(GetContext), httpListener); //開始 第二次 異步接收request請(qǐng)求 HttpListenerRequest request = context.Request; //接收的request數(shù)據(jù) HttpListenerResponse response = context.Response; //用來向客戶端發(fā)送回復(fù) response.ContentType = "html"; response.ContentEncoding = Encoding.UTF8; using (Stream output = response.OutputStream) //發(fā)送回復(fù) { byte[] buffer = Encoding.UTF8.GetBytes("要返回的內(nèi)容"); output.Write(buffer, 0, buffer.Length); } } }
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
新聞名稱:基于C#動(dòng)手實(shí)現(xiàn)網(wǎng)絡(luò)服務(wù)器WebServer-創(chuàng)新互聯(lián)
文章網(wǎng)址:http://jinyejixie.com/article34/ccidse.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供標(biāo)簽優(yōu)化、ChatGPT、商城網(wǎng)站、響應(yīng)式網(wǎng)站、服務(wù)器托管、品牌網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容