基于linux的socket網(wǎng)絡(luò)編程的性能優(yōu)化

基于linux的socket網(wǎng)絡(luò)編程的性能優(yōu)化

ID:9008599

大?。?57.50 KB

頁(yè)數(shù):5頁(yè)

時(shí)間:2018-04-14

基于linux的socket網(wǎng)絡(luò)編程的性能優(yōu)化_第1頁(yè)
基于linux的socket網(wǎng)絡(luò)編程的性能優(yōu)化_第2頁(yè)
基于linux的socket網(wǎng)絡(luò)編程的性能優(yōu)化_第3頁(yè)
基于linux的socket網(wǎng)絡(luò)編程的性能優(yōu)化_第4頁(yè)
基于linux的socket網(wǎng)絡(luò)編程的性能優(yōu)化_第5頁(yè)
資源描述:

《基于linux的socket網(wǎng)絡(luò)編程的性能優(yōu)化》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫(kù)。

1、基于Linux的Socket網(wǎng)絡(luò)編程的性能優(yōu)化時(shí)間:2009-10-2009:53:33來(lái)源:國(guó)外電子元器件作者:王雷,王子淘太原理工大學(xué)1引言???隨著Intenet的日益發(fā)展和普及,網(wǎng)絡(luò)在嵌入式系統(tǒng)中應(yīng)用非常廣泛,越來(lái)越多的嵌入式設(shè)備采用Linux操作系統(tǒng)。Linux是一個(gè)源代碼公開(kāi)的免費(fèi)操作系統(tǒng),具有強(qiáng)移植性,所以對(duì)基于Linux的Socket網(wǎng)絡(luò)編程的研究越來(lái)越重要。???Socket實(shí)際是網(wǎng)絡(luò)傳輸層供給應(yīng)用層的編程接口。傳輸層則在網(wǎng)絡(luò)層的基礎(chǔ)上提供進(jìn)程到進(jìn)程問(wèn)的邏輯通道,而應(yīng)用層的進(jìn)程則利用傳輸層向另一臺(tái)主機(jī)的某一進(jìn)程通信。Socke

2、t就是應(yīng)用層與傳輸層之間的橋梁。如圖2所示。???使用Socket編程時(shí)可以開(kāi)發(fā)客戶機(jī)和服務(wù)器應(yīng)用程序,它們可以在本地網(wǎng)絡(luò)上進(jìn)行通信,也可以通過(guò)Internet在全球范圍內(nèi)進(jìn)行通信。編寫(xiě)并運(yùn)行Socket的客戶端和服務(wù)器端程序,雙方通過(guò)套接字建立了服務(wù)連接請(qǐng)求,并且通過(guò)一些方法提高Socket的性能。3Socket編程3.1Socket類型???常見(jiàn)的Socket有3種類型:???(1)流式Socket(SOCK_STREAM)它提供可靠的通信流,使用面向連接的TCP協(xié)議,從而保證數(shù)據(jù)傳輸?shù)恼_性和順序性:???(2)數(shù)據(jù)報(bào)Socket(SOC

3、K_DGRAM)數(shù)據(jù)通過(guò)相互獨(dú)立的報(bào)文進(jìn)行傳輸,是無(wú)序的,并且不保證可靠,無(wú)差錯(cuò),它定義一種面向無(wú)連接的服務(wù),使用數(shù)據(jù)報(bào)協(xié)議UDP;???(3)原始Socket(SOCK_RAM)它允許直接訪問(wèn)底層協(xié)議,功能強(qiáng)大但使用較為不便,主要用于一些協(xié)議的開(kāi)發(fā)。本編寫(xiě)的Socket屬于流式Socket。3.2Socket編程流程???Socket編程采用客戶/服務(wù)器模式。因此編程分為服務(wù)器端和客戶端兩部分。???每一個(gè)Socket都用一個(gè)半相關(guān)描述(協(xié)議,本地地址,本地端口)來(lái)表示,Socket也有一個(gè)類似于文件打開(kāi)的函數(shù),該函數(shù)返回一個(gè)整型的Socke

4、t描述符,隨后建立連接,數(shù)據(jù)傳輸?shù)炔僮鞫纪ㄟ^(guò)Socket來(lái)實(shí)現(xiàn)。???編程流程如下:服務(wù)器端首先建立Socket,返回該Socket的描述符:配置Socket的端口和IP地址;建立監(jiān)聽(tīng)甬?dāng)?shù),檢測(cè)是否有客戶端向服務(wù)器發(fā)送請(qǐng)求,若有則接收該請(qǐng)求,將其放到接收隊(duì)列中:從接收隊(duì)列中接受一個(gè)請(qǐng)求;并向客戶端發(fā)送確認(rèn)連接信息。???客戶端建立一個(gè)Socket,返回該Socket的描述符;配置Socket端口和IP地址;向服務(wù)器發(fā)送連接請(qǐng)求,并接收服務(wù)器發(fā)回的確認(rèn)連接信息。雙方通信結(jié)束后,關(guān)閉其Socket。進(jìn)行Socket編程的基本函數(shù)有socket(),

5、bind(),listen(),accept(),connect(),send(),recv(),close()。圖3為Socket的編程流程圖。3.3程序的編譯和運(yùn)行結(jié)果???(1)在Linux的VI編輯器下編寫(xiě)服務(wù)器端程序serv.c和客戶端程序clt.c。運(yùn)用交叉編譯工具arm-linux-gcc,執(zhí)行編譯指令生成可執(zhí)行文件。???其指令為:???#gccserv.c=0serv???#gccclt.c-0clt???編譯沒(méi)有錯(cuò)誤則會(huì)生成可執(zhí)行文件serv和clt。???(2)配置服務(wù)器和客戶端的IP,保證網(wǎng)絡(luò)暢通,在serv.c中已將服

6、務(wù)器的IP設(shè)置為:192.168.2.111。在客戶端的“網(wǎng)絡(luò)設(shè)置”中設(shè)置IP為:192.168.2.22,可以通過(guò)ping命令檢測(cè)網(wǎng)絡(luò)是否暢通。???(3)在一臺(tái)計(jì)算機(jī)的終端先運(yùn)行服務(wù)器程序(./serv),再在客戶端的計(jì)算機(jī)終端上運(yùn)行客戶端程序(./clt192.:168.2.1l1)就會(huì)看到結(jié)果(Hello,WangLei!Youareconnected!);運(yùn)行結(jié)果如圖4和圖5所示。如果未運(yùn)行服務(wù)器程序而先運(yùn)行客戶端程序?qū)⒘⒓刺崾尽癈onnect:Connectionrefused”。4SOCket的性能優(yōu)化4.1解決多路復(fù)用???上面

7、的運(yùn)行過(guò)程僅實(shí)現(xiàn)了一個(gè)客戶端接人,在實(shí)際情況中,人們往往遇到多個(gè)客戶端連接服務(wù)器端的情況。由于connect(),recv(),send()都是阻塞性函數(shù),若資源沒(méi)有準(zhǔn)備好,則調(diào)用該甬?dāng)?shù)的進(jìn)程將進(jìn)入睡眠狀態(tài),無(wú)法處理I/O多路復(fù)用。在服務(wù)器端的serv.c中加入select()函數(shù),它可同時(shí)監(jiān)聽(tīng)多個(gè)套接字,實(shí)現(xiàn)I/O的多路復(fù)用。???其函數(shù)原型如下:?????該函數(shù)監(jiān)視一系列文件描述符,特別是readfds、writefds和exceptfds。如果想知道是否能從標(biāo)準(zhǔn)輸入和套接字描述符sockfd讀入數(shù)據(jù),只要將文件描述符“0”和“sockfd

8、”加入集合readfds中。參數(shù)numfds應(yīng)等于最高文件描述符的值加1,設(shè)置該值為sockfd+1。因?yàn)樗欢ù笥跇?biāo)準(zhǔn)輸入的文件描述符“0”。當(dāng)函數(shù)

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫(huà)的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無(wú)此問(wèn)題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫(kù)負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無(wú)法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。