<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 基于uCLinux和ARM7的網(wǎng)絡(luò)通信設(shè)計

          基于uCLinux和ARM7的網(wǎng)絡(luò)通信設(shè)計

          作者: 時間:2013-04-12 來源:網(wǎng)絡(luò) 收藏


          3.1 中socket編程中用到的函數(shù)

          (1) socket函數(shù)

          為了執(zhí)行I/O,一個進(jìn)程必須做的第一件事情就是調(diào)用socket函數(shù),指定期望的通信協(xié)議類型(使用IPv4的TCP、使用IPv6的UDP、Unix域字節(jié)流協(xié)議等),其函數(shù)結(jié)構(gòu)如下:int socket(int family,int type,int protocol);

          /*返回:非負(fù)描述字—成功,-1—出錯*/

          代碼中的family指明協(xié)議族。套接口的類型type是某個常值。一般來說,函數(shù)socket的參數(shù)protocol主設(shè)置為0,socket函數(shù)成功時返回一個小的非負(fù)整數(shù)值。為了得到這個數(shù)值,我們指定協(xié)議族(IPv4IP、v6或Unix)和套接口類型(字節(jié)流、數(shù)據(jù)報或原始套接口)。
          (2)connect函數(shù)

          TCP客戶用connect函數(shù)來建立一個與TCP服務(wù)器的連接。

          Int connect(int sockfd,const struct sockaddr* servaddr,socklen_t addrlen);/*返回:0—成功,-1—出錯*/

          Sockfd由socket函數(shù)返回數(shù)值,第二、第三個參數(shù)分別是一個批晌套接口地址結(jié)構(gòu)的指針和該結(jié)構(gòu)的大小。套接口葉址結(jié)構(gòu)必須含有服務(wù)器的IP地址和端口號。


          (3)bind函數(shù)

          函數(shù)bind給套接口分配一個本地協(xié)議地址。對于網(wǎng)際協(xié)議,協(xié)議地址是非顛倒2位IPv4地址16位的TCP或UDP端口號的組合。

          Int bind(int sockfd,const struct sockaddr* myaddr,socklen_t addrlen);/*返回:0—成功,-1—出錯*/

          第二個參數(shù)量個指向特定于協(xié)議地址結(jié)構(gòu)的指針,第三個參數(shù)是該地址結(jié)構(gòu)的長度。對于TCP,調(diào)用函數(shù)bind可以指定一個端口,指定一個IP地址??梢詢烧叨贾付?,也可以一個也不指定。

          (4)listen函數(shù)

          函數(shù)listen僅被除數(shù)TCP服務(wù)器調(diào)用。它做兩件事件事情,當(dāng)函數(shù)socket創(chuàng)建一個套接口時,被假設(shè)為一個主動套接口。也就是說,它是一個將調(diào)用connect發(fā)起連接的客戶套接口,函數(shù)listen將未連接的套接口轉(zhuǎn)換成被動套接口,指示內(nèi)核應(yīng)接受指向此套接口的連接請求。根據(jù)TCP狀態(tài)轉(zhuǎn)換調(diào)用函數(shù)listen導(dǎo)致套接口從CLOSED狀態(tài)轉(zhuǎn)換到LISEN狀態(tài)。函數(shù)的第二個參數(shù)規(guī)定了內(nèi)核為此套接口排隊的最大連接個數(shù)。

          Int listen(int sockfd,int backlog);

          /*返回:0—成功,-1—出錯*/

          一般來說,此函數(shù)應(yīng)在調(diào)用函數(shù)socket和bind之后,調(diào)用函數(shù)accept之前調(diào)用。

          (5)accept函數(shù)

          accept函數(shù)由TCP服務(wù)器調(diào)用,從已完成連接隊列頭返回下一個已完成連接。若已完成連接隊列為空,則進(jìn)程睡眠。(假定套接口噗缺省的阻塞方式)

          int accept(int sockfd,struct sockaddr*cliaddr,socklen_t*addrlen);/*返回非負(fù)數(shù)值—OK,-1—出錯*/

          參數(shù)cliaddr和addrlen用來返回連接對方進(jìn)程(客戶)的協(xié)議地址。Addrlen是結(jié)果參數(shù),調(diào)用前,將由*addrlen所指示的整數(shù)值置為由cliaddr所旨的套接口地址結(jié)構(gòu)的長度,返回時,此整數(shù)值即為由內(nèi)核存在此套接口地址結(jié)構(gòu)內(nèi)的準(zhǔn)確字節(jié)數(shù)。
          3.2 uClinux中編程的實現(xiàn)

          中進(jìn)行socket編程,一般按照圖書資料所示流程編寫網(wǎng)絡(luò)應(yīng)用程序。

          除了熟悉前文提出的函數(shù)外,還應(yīng)知道兩個重要的數(shù)據(jù)結(jié)構(gòu)。因為在計算機中,數(shù)據(jù)存儲有兩種字節(jié)優(yōu)先順序:高位字節(jié)優(yōu)先和低位字節(jié)優(yōu)先。在互聯(lián)網(wǎng)上,數(shù)據(jù)是以高位字節(jié)優(yōu)先順序傳輸?shù)?,所以對于在?nèi)部以低位字節(jié)優(yōu)先方式存儲的數(shù)據(jù),需要進(jìn)行轉(zhuǎn)換才能在互聯(lián)網(wǎng)上傳輸。

          linux相關(guān)文章:linux教程


          數(shù)字通信相關(guān)文章:數(shù)字通信原理


          通信相關(guān)文章:通信原理




          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();