新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于uCLinux和ARM7的網絡通信設計

        基于uCLinux和ARM7的網絡通信設計

        作者: 時間:2013-04-12 來源:網絡 收藏


        3.1 中socket編程中用到的函數

        (1) socket函數

        為了執行I/O,一個進程必須做的第一件事情就是調用socket函數,指定期望的通信協議類型(使用IPv4的TCP、使用IPv6的UDP、Unix域字節流協議等),其函數結構如下:int socket(int family,int type,int protocol);

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

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

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

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

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


        (3)bind函數

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

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

        第二個參數量個指向特定于協議地址結構的指針,第三個參數是該地址結構的長度。對于TCP,調用函數bind可以指定一個端口,指定一個IP地址。可以兩者都指定,也可以一個也不指定。

        (4)listen函數

        函數listen僅被除數TCP服務器調用。它做兩件事件事情,當函數socket創建一個套接口時,被假設為一個主動套接口。也就是說,它是一個將調用connect發起連接的客戶套接口,函數listen將未連接的套接口轉換成被動套接口,指示內核應接受指向此套接口的連接請求。根據TCP狀態轉換調用函數listen導致套接口從CLOSED狀態轉換到LISEN狀態。函數的第二個參數規定了內核為此套接口排隊的最大連接個數。

        Int listen(int sockfd,int backlog);

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

        一般來說,此函數應在調用函數socket和bind之后,調用函數accept之前調用。

        (5)accept函數

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

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

        參數cliaddr和addrlen用來返回連接對方進程(客戶)的協議地址。Addrlen是結果參數,調用前,將由*addrlen所指示的整數值置為由cliaddr所旨的套接口地址結構的長度,返回時,此整數值即為由內核存在此套接口地址結構內的準確字節數。
        3.2 uClinux中編程的實現

        中進行socket編程,一般按照圖書資料所示流程編寫網絡應用程序。

        除了熟悉前文提出的函數外,還應知道兩個重要的數據結構。因為在計算機中,數據存儲有兩種字節優先順序:高位字節優先和低位字節優先。在互聯網上,數據是以高位字節優先順序傳輸的,所以對于在內部以低位字節優先方式存儲的數據,需要進行轉換才能在互聯網上傳輸。

        linux相關文章:linux教程


        數字通信相關文章:數字通信原理


        通信相關文章:通信原理




        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 马尔康县| 长宁区| 邯郸县| 达日县| 康定县| 桐乡市| 琼海市| 武平县| 邯郸县| 安泽县| 彭山县| 松潘县| 英山县| 云龙县| 阿勒泰市| 清涧县| 苗栗市| 新化县| 新郑市| 锦州市| 湾仔区| 南充市| 濉溪县| 大埔区| 江西省| 新竹县| 胶州市| 陵川县| 昭通市| 尚义县| 衡南县| 肃南| 四平市| 永州市| 阿图什市| 和龙市| 南昌市| 太康县| 安陆市| 万盛区| 盈江县|