色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號

回到頂部

主站蜘蛛池模板: 无码日韩精品一区二区免费暖暖 | 女人的超长巨茎人妖在线视频 | 伊人久久无码中文字幕 | 野花香视频在线观看免费高清版 | 久久久久无码专区亚洲AV | 亚洲精品久久久久中文字幕 | 中文字幕一区二区日韩精品绯色 | 日本aaa在线观看 | 久久99精品久久久久久水蜜桃 | 韩国美女一级毛片 | 日本午夜影视 | 青青草97国产精品免费观看 | 男同GAY18禁免费网站 | 欧美精品狠狠色丁香婷婷 | 欧美VA亚洲VA在线观看日本 | 国产麻豆乱子伦午夜视频观看 | h无码精品动漫在线观看 | 翁公粗大挺进王丽霞高潮嗨文 | 欧美人妖aa1片 | 在线观看区 | 少妇粗大进出白浆嘿嘿视频 | 狠狠爱一区二区三区 | 国产欧美va欧美va香蕉在线观看 | 中文字幕美人妻亅u乚一596 | 好爽好硬好深高潮视频456 | 日本特黄特色aaa大片免费 | 国产高清中文手机在线观看 | 日本一区二区三区精品福利视频 | 亚洲成色WWW成人网站妖精 | "欧美 日韩 国产在线" | 中文字幕一区二区三区波多野结衣 | 亚洲av高清手机在线 | 精品国产精品人妻久久无码五月天 | 精品少妇人妻av无码专区不卡 | 国语憿情少妇无码AV | 精品无码成人网站久久久久久 | 亚洲人成在线观看网站不卡 | 亚洲经典千人经典日产 | 爆乳3把你榨干哦ova在线观看 | zzji亚洲日本少妇jizjⅰz | 亚洲天天影视 |