系列文章:
自己動手寫http服務(wù)器(一) -- UNIX C 網(wǎng)絡(luò)編程
自己動手寫http服務(wù)器(二) -- http協(xié)議分析
自己動手寫http服務(wù)器(三) -- 代碼實現(xiàn)
有了前兩篇的描述,我們就能實現(xiàn)一個簡單的web服務(wù)器了蒲祈。
效果
先來介紹一下最終的效果:
我們通過編譯生成兩個可執(zhí)行文件: fhttpd 和 login.cgi嗜湃,其中曙寡,fhttpd 是我們的web服務(wù)器軟件烫葬,而 login.cgi 是用C語言編寫的可執(zhí)行文件,用于動態(tài)生成web頁面蔫仙;
開啟服務(wù)器并訪問的過程如下:
1鲸伴、啟動服務(wù)器
通過命令 ./fhttpd 端口號
指定在本機開啟的web服務(wù)端口,并啟動服務(wù)灾票,如:
我們就開啟了web服務(wù)峡谊,開啟的端口為 8888 ;
服務(wù)器訪問
在瀏覽器中輸入 :localhost:8888
就可訪問啟動的服務(wù)器:
登陸
通過輸入用戶名和密碼,服務(wù)器會校驗用戶是否存在既们,分為3種情況:
1濒析、用戶名不存在
例如,輸入用戶名:foolish 啥纸,密碼:abc号杏,web服務(wù)器發(fā)現(xiàn)找不到該用戶名,則顯示如下:
2斯棒、密碼不正確
例如盾致,輸入用戶名:admin ,密碼:abc名船,顯示如下:
3绰上、成功登錄
例如:輸入用戶名:admin ,密碼:123456渠驼,顯示如下:
源碼
源碼可以下載zip包蜈块,地址為:
https://github.com/foolishflyfox/fhttpd/archive/master.zip
有g(shù)it的同學(xué)也可以通過git下載,使用命令:
git clone https://github.com/foolishflyfox/fhttpd.git
或
git clone git@github.com:foolishflyfox/fhttpd.git
均可下載;
在這里就不貼代碼湊字?jǐn)?shù)了迷扇,需要的自己下 _
說明
這里說一下代碼中的幾個文件的用途:
- fhttpd.c : 服務(wù)器源碼
- login.c:編譯出 login.cgi 的源文件
- index.html : 只在瀏覽器中輸入 IP:端口號 將反饋該html文件百揭;
其他的幾個很好理解,不再贅述蜓席;
要編譯出 fhttp 和 login.cgi 器一,只須執(zhí)行 make
命令即可;
代碼中的所有變量都用小駝峰命名法厨内,結(jié)構(gòu)體類型用大駝峰命名法祈秕,枚舉類型及宏定義名全部大寫;
由于代碼中使用了一些 Unix/Linux 系統(tǒng)函數(shù)的庫雏胃,所以请毛,windows下不一定能編譯通過,可以在windows下安裝Cygwin 或者 在Windows的內(nèi)置Linux子系統(tǒng)下進行編譯運行瞭亮;
涉及內(nèi)容
雖然主要的源文件 fhttp.c 只有400行只有方仿,但是內(nèi)容并不少,主要包括:
- 網(wǎng)絡(luò)編程(TCP)
- 多線程
- 多進程
- 管道通訊(IPC统翩,進程間通訊的一種方式)
- 數(shù)據(jù)的重定向
- 基礎(chǔ)C編程
應(yīng)用
這樣小又簡單的Web服務(wù)器仙蚜,對于大型的Web服務(wù)當(dāng)然不能支持。但是厂汗,在某些嵌入式中委粉,由于受制于硬件限制,也許用得到娶桦,比如艳丛,很多的路由器中匣掸,還是使用cgi提供web服務(wù)來對路由器進行配置。
建議
可以在理解的大概的思路以后氮双,自己從零開始寫一遍碰酝,而不是照抄一遍,在遇到問題時再參考代碼戴差,這樣能夠理解得更加深刻送爸。
存在的問題
為了代碼的簡單起見,我們只是用了http協(xié)議字段中的很少很少一部分的內(nèi)容暖释,而且提供的是響應(yīng)后立馬斷開連接的Http/1.0服務(wù)袭厂,所以,有時候會出現(xiàn)web頁面刷新不出來情況球匕。
如果想要大概了解一下Web服務(wù)器的工作流程纹磺,寫完這個,就差不多能夠達到目的了亮曹!
完