使用C 語(yǔ)言如何實(shí)現(xiàn) 一個(gè)web 服務(wù)器?很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。
目前成都創(chuàng)新互聯(lián)公司已為近1000家的企業(yè)提供了網(wǎng)站建設(shè)、域名、虛擬主機(jī)、綿陽(yáng)服務(wù)器托管、企業(yè)網(wǎng)站設(shè)計(jì)、芒市網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。一、了解 Socket 及 web 服務(wù)工作原理
既然是基于 tcp 實(shí)現(xiàn) web 服務(wù)器,很多學(xué)習(xí) C 語(yǔ)言的小伙伴可能會(huì)很快的想到套接字 socket。socket 是一個(gè)較為抽象的通信進(jìn)程,或者說(shuō)是主機(jī)與主機(jī)進(jìn)行信息交互的一種抽象。socket 可以將數(shù)據(jù)流送入網(wǎng)絡(luò)中,也可以接收數(shù)據(jù)流。
socket 的信息交互與本地文件信息的讀取從表面特征上看類似,但其中所存在的編寫復(fù)雜度是本地 IO 不能比擬的,但卻有相似點(diǎn)。在 win 下 socket 的交互交互步驟為:WSAStartup 進(jìn)行初始化--> socket 創(chuàng)建套接字--> bind 綁定--> listen 監(jiān)聽--> connect 連接--> accept 接收請(qǐng)求--> send/recv 發(fā)送或接收數(shù)據(jù)--> closesocket 關(guān)閉 socket--> WSACleanup 最終關(guān)閉。
了解完了一個(gè) socket 的基本步驟后我們了解一下一個(gè)基本 web 請(qǐng)求的用戶常規(guī)操作,操作分為:打開瀏覽器-->輸入資源地址 ip 地址-->得到資源。當(dāng)目標(biāo)服務(wù)器接收到該操作產(chǎn)生掉請(qǐng)求后,我們可以把服務(wù)器的響應(yīng)流程步驟看為:獲得 request 請(qǐng)求-->得到請(qǐng)求關(guān)鍵數(shù)據(jù)-->獲取關(guān)鍵數(shù)據(jù)-->發(fā)送關(guān)鍵數(shù)據(jù)。服務(wù)器的這一步流程是在啟動(dòng)socket 進(jìn)行監(jiān)聽后才能響應(yīng)。通過(guò)監(jiān)聽得知接收到請(qǐng)求,使用 recv 接收請(qǐng)求數(shù)據(jù),從而根據(jù)該參數(shù)得到進(jìn)行資源獲取,最后通過(guò) send 將數(shù)據(jù)進(jìn)行返回。
首先在c語(yǔ)言頭文件中引入依賴 WinSock2.h:
#include