HTTP 服務(wù)器程序編寫(xiě)過(guò)程總結(jié)(一)
【內(nèi)容聲明】文章部分內(nèi)容收集整理于網(wǎng)絡(luò),僅供參考!如需了解“HTTP 服務(wù)器程序編寫(xiě)過(guò)程總結(jié)(一)”等有關(guān)服務(wù)器、云主機(jī)租用、托管、配置、價(jià)格問(wèn)題,請(qǐng)立即咨詢(xún)YINGSOO客服,為您答疑解惑!
【暢銷(xiāo)主機(jī)】香港云服務(wù)器 | 美國(guó)站群服務(wù)器 | 臺(tái)灣600M服務(wù)器
【導(dǎo)購(gòu)指南】香港云服務(wù)器哪個(gè)好?如何選擇香港云服務(wù)器?
HTTP服務(wù)器,就是一個(gè)運(yùn)行在主機(jī)上的程序。程序啟動(dòng)了之后,會(huì)一直在等待其他所有客戶(hù)端的請(qǐng)求,接收到請(qǐng)求之后,處理請(qǐng)求,然后發(fā)送響應(yīng)給客戶(hù)端??蛻?hù)端和服務(wù)器之間使用HTTP協(xié)議進(jìn)行通信,所有遵循HTTP協(xié)議的程序都可以作為客戶(hù)端。先直接上代碼,然后再詳細(xì)說(shuō)明實(shí)現(xiàn)細(xì)節(jié)。測(cè)試運(yùn)行代碼寫(xiě)好之后,運(yùn)行測(cè)試一下,將上面代碼保存到server.c,然后編譯程序:./server運(yùn)行服務(wù)器運(yùn)行,監(jiān)聽(tīng)9001端口。再用netstat命令查看:server程序在監(jiān)聽(tīng)9001端口,運(yùn)行正確。接著用瀏覽器訪問(wèn),成功輸出了Hello World,再?lài)L試用telnet去模擬HTTP請(qǐng)求:1、成功連接2、發(fā)送HTTP請(qǐng)求3、HTTP響應(yīng)結(jié)果上面是一個(gè)最簡(jiǎn)單的server程序,代碼比較簡(jiǎn)單,省去一些細(xì)節(jié),下面通過(guò)代碼來(lái)學(xué)習(xí)一下socket的編程細(xì)節(jié)。啟動(dòng)server的流程socket 函數(shù)創(chuàng)建一個(gè)套接字,通過(guò)各參數(shù)指定套接字的類(lèi)型。套接字地址結(jié)構(gòu)在socket編程中,大部分函數(shù)都用到一個(gè)指向套接字地址結(jié)構(gòu)的指針作為參數(shù)。針對(duì)不同的協(xié)議類(lèi)型,會(huì)有不同的結(jié)構(gòu)體定義格式,對(duì)于ipv4,結(jié)構(gòu)如下所示:注:sockaddr_in是**Internet socket address structure**的縮寫(xiě)。ip地址結(jié)構(gòu)套接字地址結(jié)構(gòu)的作用是為了將ip地址和端口號(hào)傳遞到socket函數(shù),寫(xiě)成結(jié)構(gòu)體的方式是為了抽象。當(dāng)作為一個(gè)參數(shù)傳遞進(jìn)任何套接字函數(shù)時(shí),套接字地址結(jié)構(gòu)總是以引用方式傳遞。然而,協(xié)議族有很多,因此以這樣的指針作為參數(shù)之一的任何套接字函數(shù)必須處理來(lái)自所有支持的任何協(xié)議族的套接字地址結(jié)構(gòu)。使用void *作為通用的指針類(lèi)型,因此,套接字函數(shù)被定義為以指向某個(gè)通用套接字結(jié)構(gòu)的一個(gè)指針作為其參數(shù)之一,正如下面的bind函數(shù)原型一樣。這就要求,對(duì)這些函數(shù)的任何調(diào)用都必須要將指向特定于協(xié)議的套接字地址結(jié)構(gòu)的指針進(jìn)行強(qiáng)制類(lèi)型轉(zhuǎn)換,變成某個(gè)通用套接字地址結(jié)構(gòu)的指針。例如:對(duì)于所有socket函數(shù)而言,sockaddr的唯一用途就是對(duì)指向特定協(xié)議的套接字地址結(jié)構(gòu)的指針執(zhí)行強(qiáng)制類(lèi)型轉(zhuǎn)換,指向要綁定給sockfd的協(xié)議地址。bind函數(shù)將套接字地址結(jié)構(gòu)綁定到套接字地址的長(zhǎng)度綁定了socket之后,就可以使用該socket開(kāi)始監(jiān)聽(tīng)請(qǐng)求了。listen函數(shù)將sockfd從未連接的套接字轉(zhuǎn)換成一個(gè)被動(dòng)套接字,指示內(nèi)核應(yīng)接受指向該套接字的連接請(qǐng)求。listen函數(shù)會(huì)將套接字從CLOSED狀態(tài)轉(zhuǎn)換到LISTEN狀態(tài),第二個(gè)參數(shù)規(guī)定內(nèi)核應(yīng)該為相應(yīng)套接字排隊(duì)的最大連接個(gè)數(shù)。關(guān)于backlog參數(shù),內(nèi)核為任何一個(gè)給定的監(jiān)聽(tīng)套接字維護(hù)兩個(gè)隊(duì)列:1、未完成連接隊(duì)列,在隊(duì)列里面的套接字處于SYN_RCVD狀態(tài)2、已完成隊(duì)列,處于ESTABLISHED狀態(tài)兩個(gè)隊(duì)列之和不超過(guò)backlog的大小。listen完成之后,socket就處于LISTEN狀態(tài),此時(shí)的socket調(diào)用accept函數(shù)就可以接受客戶(hù)端發(fā)來(lái)的請(qǐng)求了。
猜你喜歡:香港云主機(jī)租用去首頁(yè)參與活動(dòng)!YINGSOO推出PHA挖礦服務(wù)器、PHA挖礦教程、Chia奇亞服務(wù)器、Swarm物理節(jié)點(diǎn)服務(wù)器、Swarm母雞服務(wù)器、Swarm云節(jié)點(diǎn)服務(wù)器、《Phala PHA挖礦資料大全》、《swarm bzz挖礦資料大全》,Swarm Bee節(jié)點(diǎn)租用請(qǐng)咨詢(xún)YINGSOO客服!
版權(quán)聲明:本站文章來(lái)源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請(qǐng)保持原文完整并注明來(lái)源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來(lái)源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來(lái),僅供學(xué)習(xí)參考,不代表本站立場(chǎng),如有內(nèi)容涉嫌侵權(quán),請(qǐng)聯(lián)系alex-e#qq.com處理。