昨天嘗試了,基于對http協議的探究,我們用控制臺寫了一個簡單的瀏覽器。盡管瀏覽器很low,但是對于http協議有個更好的理解。
說了上面這一段,諸位猜到我要干嘛了嗎?(其實不用猜哈,標題里都有,又都不瞎。。。我就是調侃一下,說些沒營養的笑話。我認為這樣能不那么枯燥,盡管不好笑吧,但這不重要?。?/p>
沒錯,今天要嘗試的東西,是自己寫一個web服務器。初衷依舊和昨天一樣,旨在理解一些東西,而不是真的寫出一個多牛的東西。
1.理論支持
其實關于http協議的理論方面我在《寫一個瀏覽器》的博文中已經說過了,這里不再累述了。
這里主要要說的關于Socket方面的。主要是一個例子,關于Socket如何建立服務端程序的簡單的代碼掩飾。
static void Main(string[] args) { //創建一個新的Socket,這里我們使用最常用的基于TCP的Stream Socket(流式套接字) var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, PRotocolType.Tcp); //將該socket綁定到主機上面的某個端口 socket.Bind(new ipEndPoint(IPAddress.Any, 4530)); //啟動監聽,并且設置一個最大的隊列長度 socket.Listen(4); //到這里我們的Socket已經運行起來了,但僅僅是運行起來,什么都不會做的! Console.WriteLine("Server is ready!"); Console.Read(); }
打開調試一口,因為要監聽某個端口,windows會有這樣的一個提示。點允許就好了。
從上面例子看,socket的職責僅僅是監聽4530端口,什么都不會做的!
就像一個人的耳朵。他會聆聽,但是不會傾訴。職責所限,我們需要一個監聽4530端口的耳朵。
但是從交流的角度看,web服務器僅僅能聆聽是不夠的。
請求來了以后(監聽到請求以后),我還需要一個既能聆聽,又能訴說的Socket。去和請求交流。
剛剛那個socket為啥不能直接交流呢? 不不不,他得繼續去聆聽新的請求。
2.說說思路
這次實驗的主要思路是這樣的。
1)監聽4530端口
2)當請求來了以后,我們使用Socket socket = serverSocket.Accept();建立一個新的socket。
3)新的socket返回一個字符串給請求方!
完了(讀liao)。
也就是說,我們v1.0版本的web服務器,不管你如何請求,他都會返回你同一個字符串!(任性吧?其實我挺喜歡就這樣的。)
3.代碼
static void Main(string[] args){ //我僅負責聆聽,因為你來了,我就得接
新聞熱點
疑難解答