中文字幕 另类精品,亚洲欧美一区二区蜜桃,日本在线精品视频免费,孩交精品乱子片免费

<sup id="3hn2b"></sup>

    1. <sub id="3hn2b"><ol id="3hn2b"></ol></sub><legend id="3hn2b"></legend>

      1. <xmp id="3hn2b"></xmp>

      2. 新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 嵌入式Linux網(wǎng)絡(luò)編程之:網(wǎng)絡(luò)基礎(chǔ)編程

        嵌入式Linux網(wǎng)絡(luò)編程之:網(wǎng)絡(luò)基礎(chǔ)編程

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

        本文引用地址:http://www.antipu.com.cn/article/257116.htm

        10.2網(wǎng)絡(luò)基礎(chǔ)編程

        10.2.1socket概述

        1.socket定義

        在Linux中的是通過socket接口來進行的。人們常說的socket是一種特殊的I/O接口,它也是一種文件描述符。socket是一種常用的進程之間通信機制,通過它不僅能實現(xiàn)本地機器上的進程之間的通信,而且通過網(wǎng)絡(luò)能夠在不同機器上的進程之間進行通信。

        每一個socket都用一個半相關(guān)描述{協(xié)議、本地地址、本地端口}來表示;一個完整的套接字則用一個相關(guān)描述{協(xié)議、本地地址、本地端口、遠程地址、遠程端口}來表示。socket也有一個類似于打開文件的函數(shù)調(diào)用,該函數(shù)返回一個整型的socket描述符,隨后的連接建立、數(shù)據(jù)傳輸?shù)炔僮鞫际峭ㄟ^socket來實現(xiàn)的。

        2.socket類型

        常見的socket有3種類型如下。

        (1)流式socket(SOCK_STREAM)。

        流式套接字提供可靠的、面向連接的通信流;它使用TCP協(xié)議,從而保證了數(shù)據(jù)傳輸?shù)恼_性和順序性。

        (2)數(shù)據(jù)報socket(SOCK_DGRAM)。

        數(shù)據(jù)報套接字定義了一種無連接的服務(wù),數(shù)據(jù)通過相互獨立的報文進行傳輸,是無序的,并且不保證是可靠、無差錯的。它使用數(shù)據(jù)報協(xié)議UDP。

        (3)原始socket。

        原始套接字允許對底層協(xié)議如IP或ICMP進行直接訪問,它功能強大但使用較為不便,主要用于一些協(xié)議的開發(fā)。

        10.2.2地址及順序處理

        1.地址結(jié)構(gòu)相關(guān)處理

        (1)數(shù)據(jù)結(jié)構(gòu)介紹。

        下面首先介紹兩個重要的數(shù)據(jù)類型:sockaddr和sockaddr_in,這兩個結(jié)構(gòu)類型都是用來保存socket信息的,如下所示:

        structsockaddr

        {

        unsignedshortsa_family;/*地址族*/

        charsa_data[14];/*14字節(jié)的協(xié)議地址,包含該socket的IP地址和端口號。*/

        };

        structsockaddr_in

        {

        shortintsa_family;/*地址族*/

        unsignedshortintsin_port;/*端口號*/

        structin_addrsin_addr;/*IP地址*/

        unsignedcharsin_zero[8];/*填充0以保持與structsockaddr同樣大小*/

        };

        這兩個數(shù)據(jù)類型是等效的,可以相互轉(zhuǎn)化,通常sockaddr_in數(shù)據(jù)類型使用更為方便。在建立socketadd或sockaddr_in后,就可以對該socket進行適當(dāng)?shù)牟僮髁恕?/p>

        (2)結(jié)構(gòu)字段。

        表10.1列出了該結(jié)構(gòu)sa_family字段可選的常見值。

        表10.1

        結(jié)構(gòu)定義頭文件

        #includenetinet/in.h>

        sa_family

        AF_INET:IPv4協(xié)議

        AF_INET6:IPv6協(xié)議

        AF_LOCAL:UNIX域協(xié)議

        AF_LINK:鏈路地址協(xié)議

        AF_KEY:密鑰套接字(socket)

        sockaddr_in其他字段的含義非常清楚,具體的設(shè)置涉及其他函數(shù),在后面會有詳細的講解。

        2.?dāng)?shù)據(jù)存儲優(yōu)先順序

        (1)函數(shù)說明。

        計算機數(shù)據(jù)存儲有兩種字節(jié)優(yōu)先順序:高位字節(jié)優(yōu)先(稱為大端模式)和低位字節(jié)優(yōu)先(稱為小端模式,PC機通常采用小端模式)。Internet上數(shù)據(jù)以高位字節(jié)優(yōu)先順序在網(wǎng)絡(luò)上傳輸,因此在有些情況下,需要對這兩個字節(jié)存儲優(yōu)先順序進行相互轉(zhuǎn)化。這里用到了4個函數(shù):htons()、ntohs()、htonl()和ntohl()。這4個地址分別實現(xiàn)網(wǎng)絡(luò)字節(jié)序和主機字節(jié)序的轉(zhuǎn)化,這里的h代表host,n代表network,s代表short,l代表long。通常16位的IP端口號用s代表,而IP地址用l來代表。

        (2)函數(shù)格式說明。

        表10.2列出了這4個函數(shù)的語法格式。

        表10.2 htons等函數(shù)語法要點

        所需頭文件

        #includenetinet/in.h>

        函數(shù)原型

        uint16_thtons(unit16_thost16bit)
        uint32_thtonl(unit32_thost32bit)
        uint16_tntohs(unit16_tnet16bit)
        uint32_tntohs(unit32_tnet32bit)

        函數(shù)傳入值

        host16bit:主機字節(jié)序的16位數(shù)據(jù)

        host32bit:主機字節(jié)序的32位數(shù)據(jù)

        net16bit:網(wǎng)絡(luò)字節(jié)序的16位數(shù)據(jù)

        net32bit:網(wǎng)絡(luò)字節(jié)序的32位數(shù)據(jù)

        函數(shù)返回值

        成功:返回要轉(zhuǎn)換的字節(jié)序

        出錯:-1

        注意

        調(diào)用該函數(shù)只是使其得到相應(yīng)的字節(jié)序,用戶不需清楚該系統(tǒng)的主機字節(jié)序和網(wǎng)絡(luò)字節(jié)序是否真正相等。如果是相同不需要轉(zhuǎn)換的話,該系統(tǒng)的這些函數(shù)會定義成空宏。

        3.地址格式轉(zhuǎn)化

        (1)函數(shù)說明。

        通常用戶在表達地址時采用的是點分十進制表示的數(shù)值(或者是以冒號分開的十進制IPv6地址),而在通常使用的socket編程中所使用的則是二進制值,這就需要將這兩個數(shù)值進行轉(zhuǎn)換。這里在IPv4中用到的函數(shù)有inet_aton()、inet_addr()和inet_ntoa(),而IPv4和IPv6兼容的函數(shù)有inet_pton()和inet_ntop()。由于IPv6是下一代互聯(lián)網(wǎng)的標(biāo)準(zhǔn)協(xié)議,因此,本書講解的函數(shù)都能夠同時兼容IPv4和IPv6,但在具體舉例時仍以IPv4為例。

        這里inet_pton()函數(shù)是將點分十進制地址映射為二進制地址,而inet_ntop()是將二進制地址映射為點分十進制地址。

        (2)函數(shù)格式。

        表10.3列出了inet_pton函數(shù)的語法要點。

        表10.3 inet_pton函數(shù)語法要點

        所需頭文件

        #includearpa/inet.h>

        函數(shù)原型

        intinet_pton(intfamily,constchar*strptr,void*addrptr)

        函數(shù)傳入值

        family

        AF_INET:IPv4協(xié)議

        AF_INET6:IPv6協(xié)議

        strptr:要轉(zhuǎn)化的值

        addrptr:轉(zhuǎn)化后的地址

        函數(shù)返回值

        成功:0

        出錯:-1

        linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

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



        上一頁 1 2 3 4 5 6 下一頁

        評論


        相關(guān)推薦

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

        關(guān)閉