新聞中心

        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教程


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


        通信相關文章:通信原理




        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 九龙城区| 库伦旗| 中方县| 噶尔县| 朝阳市| 乡城县| 江安县| 德钦县| 垫江县| 华容县| 武宁县| 潜山县| 横山县| 仙桃市| 沁水县| 堆龙德庆县| 无极县| 西乡县| 含山县| 韶关市| 武胜县| 台北县| 临泉县| 壤塘县| 舟曲县| 嘉祥县| 阿克陶县| 辉南县| 东源县| 林芝县| 宁强县| 朔州市| 阿坝| 喀喇| 遂宁市| 蓬莱市| 临沭县| 平遥县| 福泉市| 永泰县| 车险|