色yeye在线视频观看_亚洲人亚洲精品成人网站_一级毛片免费播放_91精品一区二区中文字幕_一区二区三区日本视频_成人性生交大免费看

當前位置:首頁 > 嵌入式培訓 > 嵌入式學習 > 講師博文 > Linux網絡編程之套接字

Linux網絡編程之套接字 時間:2014-10-21      來源:未知

一 :套接字屬性

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

1)套接字的域

域指定套接字通信中使用的網絡 介質,常見的套接字域是AF_INET,它指的是互聯網絡,許多LINUX局域網使用的都是該網絡。

服務器上可能同時有多個服務正在運行,客戶可以通過IP端口來指定一臺聯網機器上的某個特定服務。在系統內部,端口通過分配一個唯一的16位整數來標識,在系統外部,則需要通過IP地址和端口號的組合來確定。套接字作為通信的終點,它必須在開始通信之前綁定一個端口。

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

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

2)套接字類型

套接字有三種類型:流式套接字(SOCK_STREAM),數據報套接字(SOCK_DGRAM)及原始套接字。

1、流式套接字(SOCK_STREAM)

流式套接字提供的是一個有序,可靠,雙向字節流的連接。因此,發送的數據可以確保不會丟失,復制或亂序到達,并且在這一過程 中發生的錯誤也不會顯示出來。流式套接字由類型SOCK_STREAM指定,它們是地AF_INET域中通過TCP/IP連接來實現的,它們也是AF_UNIX域中常用的套接字類型。

2、數據報套接字(SOCK_DGRAM)

與此相反 ,由SOCK_DGRAM指定的數據報套接字不建立和維持一個連接,它尋可以發送的數據報的長度有限制。數據報作為一個單獨的網絡消息被傳輸,它可能會丟失,復制或亂序到達。數據報套接字是在AF_INET域中通過UDP/IP連接來實現的,它提供的是一種無序的不可靠服務,但從資源的角度來看,相對來說它們開銷比較小,因為不需要維持網絡連接,而且因為無需花費時間來建立連接,它們的速度也很快。

3、原始套接字

二 :套接字協議

只要底層傳輸機制允許不止一個協議來提供所要求的套接字類型,就可以為套接字選擇一個特定的協議。我們重點討論UNIX網絡套接字和文件系統套接字,它們不需要你 選擇一個特定的協議,只需要使用其默認值即可。

三 :創建套接字

socket系統調用創建一個套接字并返回一個描述符,該描述符可以用來訪問該套接字。
        #include < sys/types.h>
        #include < sys/socket.h>
        socket函數原型為:
        int socket(int domain, int type, int protocol);

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

一旦通過socket調用返回一個socket描述符,你應該將該socket與你本機上的一個端口相關聯(往往當你在設計服務器端程序時需要調用該函數。隨后你就可以在該端口監聽服務請求;而客戶端一般無須調用該函數)。

五:套接字地址

每個套接字域都有其自己的地址格式。對于AF_INET域來說,套接字地址由結構sockaddr_in來指定,該結構在頭文件netinet/in.h中定義。

我們要討論的第一個結構類型是:struct sockaddr,該類型是用來保存socket信息的:
        struct sockaddr
        { 
          unsigned short sa_family; /* 地址族, AF_xxx */ 
             char sa_data[14]; /* 14 字節的協議地址 */
        };

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

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

這個結構使用更為方便。sin_zero(它用來將sockaddr_in結構填充到與struct sockaddr同樣的長度)應該用bzero()或memset()函數將其置為零。指向sockaddr_in 的指針和指向sockaddr的指針可以相互轉換,這意味著如果一個函數所需參數類型是sockaddr時,你可以在函數調用的時候將一個指向 sockaddr_in的指針轉換為指向sockaddr的指針;或者相反。sin_family通常被賦AF_INET;sin_port和 sin_addr應該轉換成為網絡字節優先順序 。

IP地址結構struct in_addr被定義為:
        struct in_addr
        {
                unsigned long int s_addr;
         };

IP地址中的四個字節組成一個32位的值。

這是幾個字節順序轉換函數:
        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機制

熱點文章推薦
華清學員就業榜單
高薪學員經驗分享
熱點新聞推薦
前臺專線:010-82525158 企業培訓洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠見科技集團有限公司 版權所有 ,京ICP備16055225號-5京公海網安備11010802025203號

回到頂部

主站蜘蛛池模板: 日本阿v片在线播放免费 | 公侵犯玩弄漂亮人妻优 | 日韩AV一国产AV一中文字慕 | 日本一卡2卡3卡4卡5卡精品视频 | 日韩午夜无码A级毛片 | 免费精品无码AV片在线观看 | 中文字幕无码成人免费视频 | 100日本XXXXXXXXX | 三年中文在线观看免费国语第五集 | 日本熟妇人妻XXXXX免费看 | 色偷偷人人澡人人添老妇人 | 很色很黄很大爽的视频 | 成人无码A区在线观看视频 а的天堂网最新版在线 | 三级国产国语三级在线 | 欧洲欧美人成视频在线 | 性一交一乱一交A片 | 婷婷久久香蕉五月综合加勒比 | 免费看美女被靠到爽的视频 | 午夜福利国产在线观看1 | 国产69精品久久久久999小说 | 亚洲精品自偷自拍无码 | 国产日皮视频 | 国产精品日本无码久久 | 大又大又粗又硬又爽少妇毛片 | 亚洲一区二区观看 | 国产女人乱子对白AV片 | 熟女丝袜潮喷内裤视频网站 | 四虎影视在线视频 | 狠狠色丁香婷婷久久综合蜜芽 | 无码一区二区三区中文字幕 | 亚洲AV成人综合网久久 | ww欧日韩视频高清在线 | 宅男影院在线播放999 | 娇妻被别人玩弄至高潮视频 | 鲁一鲁操一操 | 亚洲欧美在线观看, | 亚洲欧洲日本无在线码天堂 | 女性高爱潮aaaa级视频免费 | 欧洲精品视频在线观看 | 最新精品国偷自产在线美女足 | 成全视频免费高清游戏 |