亚洲精品一二区_国产黄色片网站_99久久久成人国产精品_蜜臀网_国产精品一区二区三区免费_成人av中文字幕_91精品国产欧美一区二区成人

當(dāng)前位置:首頁(yè) > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 講師博文 > Linux網(wǎng)絡(luò)編程之套接字

Linux網(wǎng)絡(luò)編程之套接字 時(shí)間:2014-10-21      來(lái)源:未知

一 :套接字屬性

套接字由域(domain),類型(type)和協(xié)議(protocol)三個(gè)屬性確定其特性。

1)套接字的域

域指定套接字通信中使用的網(wǎng)絡(luò) 介質(zhì),常見(jiàn)的套接字域是AF_INET,它指的是互聯(lián)網(wǎng)絡(luò),許多LINUX局域網(wǎng)使用的都是該網(wǎng)絡(luò)。

服務(wù)器上可能同時(shí)有多個(gè)服務(wù)正在運(yùn)行,客戶可以通過(guò)IP端口來(lái)指定一臺(tái)聯(lián)網(wǎng)機(jī)器上的某個(gè)特定服務(wù)。在系統(tǒng)內(nèi)部,端口通過(guò)分配一個(gè)唯一的16位整數(shù)來(lái)標(biāo)識(shí),在系統(tǒng)外部,則需要通過(guò)IP地址和端口號(hào)的組合來(lái)確定。套接字作為通信的終點(diǎn),它必須在開(kāi)始通信之前綁定一個(gè)端口。

服務(wù)器在特定的端口等待客戶的連接,知名服務(wù)器所分配的端口號(hào)在所有LINUX和UNIX機(jī)器上都是一樣的,它們通常(但并不總是如此)小于1024,一般情況下,小于1024的端口號(hào)都是為系統(tǒng)服務(wù)保留的,并且所服務(wù)的進(jìn)程必須具有超級(jí)用戶權(quán)限。

其它可以使用的域如AF_UNIX,AF_ISO,AF_XFA等。

2)套接字類型

套接字有三種類型:流式套接字(SOCK_STREAM),數(shù)據(jù)報(bào)套接字(SOCK_DGRAM)及原始套接字。

1、流式套接字(SOCK_STREAM)

流式套接字提供的是一個(gè)有序,可靠,雙向字節(jié)流的連接。因此,發(fā)送的數(shù)據(jù)可以確保不會(huì)丟失,復(fù)制或亂序到達(dá),并且在這一過(guò)程 中發(fā)生的錯(cuò)誤也不會(huì)顯示出來(lái)。流式套接字由類型SOCK_STREAM指定,它們是地AF_INET域中通過(guò)TCP/IP連接來(lái)實(shí)現(xiàn)的,它們也是AF_UNIX域中常用的套接字類型。

2、數(shù)據(jù)報(bào)套接字(SOCK_DGRAM)

與此相反 ,由SOCK_DGRAM指定的數(shù)據(jù)報(bào)套接字不建立和維持一個(gè)連接,它尋可以發(fā)送的數(shù)據(jù)報(bào)的長(zhǎng)度有限制。數(shù)據(jù)報(bào)作為一個(gè)單獨(dú)的網(wǎng)絡(luò)消息被傳輸,它可能會(huì)丟失,復(fù)制或亂序到達(dá)。數(shù)據(jù)報(bào)套接字是在AF_INET域中通過(guò)UDP/IP連接來(lái)實(shí)現(xiàn)的,它提供的是一種無(wú)序的不可靠服務(wù),但從資源的角度來(lái)看,相對(duì)來(lái)說(shuō)它們開(kāi)銷比較小,因?yàn)椴恍枰S持網(wǎng)絡(luò)連接,而且因?yàn)闊o(wú)需花費(fèi)時(shí)間來(lái)建立連接,它們的速度也很快。

3、原始套接字

二 :套接字協(xié)議

只要底層傳輸機(jī)制允許不止一個(gè)協(xié)議來(lái)提供所要求的套接字類型,就可以為套接字選擇一個(gè)特定的協(xié)議。我們重點(diǎn)討論UNIX網(wǎng)絡(luò)套接字和文件系統(tǒng)套接字,它們不需要你 選擇一個(gè)特定的協(xié)議,只需要使用其默認(rèn)值即可。

三 :創(chuàng)建套接字

socket系統(tǒng)調(diào)用創(chuàng)建一個(gè)套接字并返回一個(gè)描述符,該描述符可以用來(lái)訪問(wèn)該套接字。
        #include < sys/types.h>
        #include < sys/socket.h>
        socket函數(shù)原型為:
        int socket(int domain, int type, int protocol);

domain參數(shù)指定socket的類型,一般為AF_INET,type可以是SOCK_STREAM 或SOCK_DGRAM,分別表示TCP連接和UDP連接;protocol通常賦值"0"。Socket()調(diào)用返回一個(gè)整型socket描述符,你可 以在后面的調(diào)用使用它。

一旦通過(guò)socket調(diào)用返回一個(gè)socket描述符,你應(yīng)該將該socket與你本機(jī)上的一個(gè)端口相關(guān)聯(lián)(往往當(dāng)你在設(shè)計(jì)服務(wù)器端程序時(shí)需要調(diào)用該函數(shù)。隨后你就可以在該端口監(jiān)聽(tīng)服務(wù)請(qǐng)求;而客戶端一般無(wú)須調(diào)用該函數(shù))。

五:套接字地址

每個(gè)套接字域都有其自己的地址格式。對(duì)于AF_INET域來(lái)說(shuō),套接字地址由結(jié)構(gòu)sockaddr_in來(lái)指定,該結(jié)構(gòu)在頭文件netinet/in.h中定義。

我們要討論的第一個(gè)結(jié)構(gòu)類型是:struct sockaddr,該類型是用來(lái)保存socket信息的:
        struct sockaddr
        { 
          unsigned short sa_family; /* 地址族, AF_xxx */ 
             char sa_data[14]; /* 14 字節(jié)的協(xié)議地址 */
        };

sa_family一般為AF_INET;sa_data則包含該socket的IP地址和端口號(hào)。

另外還有一種結(jié)構(gòu)類型:
        struct sockaddr_in
        { 
          short int sin_ family; /* 地址族 */ 
           unsigned short int sin_port; /* 端口號(hào) */ 
           struct in_addr sin_addr; /* IP地址 */ 
           unsigned char sin_zero[8]; /* 填充0 以保持與struct sockaddr同樣大小 */ 
   };

這個(gè)結(jié)構(gòu)使用更為方便。sin_zero(它用來(lái)將sockaddr_in結(jié)構(gòu)填充到與struct sockaddr同樣的長(zhǎng)度)應(yīng)該用bzero()或memset()函數(shù)將其置為零。指向sockaddr_in 的指針和指向sockaddr的指針可以相互轉(zhuǎn)換,這意味著如果一個(gè)函數(shù)所需參數(shù)類型是sockaddr時(shí),你可以在函數(shù)調(diào)用的時(shí)候?qū)⒁粋(gè)指向 sockaddr_in的指針轉(zhuǎn)換為指向sockaddr的指針;或者相反。sin_family通常被賦AF_INET;sin_port和 sin_addr應(yīng)該轉(zhuǎn)換成為網(wǎng)絡(luò)字節(jié)優(yōu)先順序 。

IP地址結(jié)構(gòu)struct in_addr被定義為:
        struct in_addr
        {
                unsigned long int s_addr;
         };

IP地址中的四個(gè)字節(jié)組成一個(gè)32位的值。

這是幾個(gè)字節(jié)順序轉(zhuǎn)換函數(shù):
        htons()--"Host to Network Short" ; htonl()--"Host to Network Long" 
  ntohs()--"Network to Host Short" ; ntohl()--"Network to Host Long"

在這里,h表示"host" ,n表示"network",s 表示"short",l表示 "long"。

上一篇:刪除固件中的初始程序

下一篇:linux下的rtc機(jī)制

熱點(diǎn)文章推薦
華清學(xué)員就業(yè)榜單
高薪學(xué)員經(jīng)驗(yàn)分享
熱點(diǎn)新聞推薦
前臺(tái)專線:010-82525158 企業(yè)培訓(xùn)洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠(yuǎn)見(jiàn)科技集團(tuán)有限公司 版權(quán)所有 ,京ICP備16055225號(hào)-5京公海網(wǎng)安備11010802025203號(hào)

回到頂部

主站蜘蛛池模板: 欧美一区二区三区播放 | 欧美卡1卡2卡三卡网站入口 | 免费黄色a视频 | 久久久精品3d动漫一区二区三区 | 韩国三级bd高清中文字幕合集 | 国产欧美一区二区久久 | 欧美性猛| 久久久美女 | 日本精品一在线观看视频 | 日韩在线黄色 | 成人中文字幕在线 | 黄色片久久久 | 波多野结衣在线观看一区二区 | 欧美xx网站| 精品视频手机在线观看免费 | 99精品视频不卡在线观看免费 | 久久免费视频精品 | 日韩在线一区二区三区视频 | 日本a级精品一区二区三区 日本a级免费 | 国产精品天堂 | 国产精品高清久久久久久久 | 欧美精品一区二区三区四区 | 欧美日韩亚| 精品国产成人高清在线 | 欧美日韩一区二区在线观看 | 天天靠天天擦天天摸 | 国产色a| 性做久久久久久坡多野结衣 | jizzjizz日本人| 日本二区在线观看 | 久久伊人免费 | 全免费a级毛片免费看不卡 全免费a级毛片免费看视频免 | 人人爱爱人人 | 免费观看欧美一区二区三区 | 日本精品视频一视频高清 | 深夜精品寂寞在线观看黄网站 | 黄色视屏日本 | 免费黄色网址在线播放 | 青青青免费网站在线观看 | 青娱极品盛宴国产一区 | 国产免费jizz在线播放视频 |