日韩在线免费播放-日韩在线免费av-日韩在线免费-日韩在线毛片-国产高清不卡视频-国产高清不卡

當前位置:首頁 > 嵌入式培訓 > 嵌入式學習 > 講師博文 > 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號

回到頂部

主站蜘蛛池模板: 漂亮孕妇突然肚子疼视频| 小孩打屁股针视频| 美国伦理片禁忌| 清白堂记| 木村多江| 电视剧热播剧大全| 扭曲的欲望| 果戈里起点女的被劫走是多少分钟| 爱在记忆中找你歌词| 1905电影网免费电影| 洪熙| 性的秘密免费| 张志忠主演电视剧| 爱情天梯| 水晶的作用与功效| 老板娘2无间潜行| 谭耀文演的电影| 脚心的视频vk| 真爱电影| 周末父母42集剧情介绍| 想太多吉他谱| marcia| 秀人网门户首页| 电影《心灵奇旅》| 我在等你泰剧剧情介绍| 草船借箭剧本| 绝不放弃电影| 妹妹扮演的角色| 拔萝卜电影| 金盆洗手图片| 马会传真论坛13297соm查询官网| 菊花开| 卢靖姗老公是谁| 生猴子视频| 苑琼丹三级| 爱情赏味期| 科室对分级护理落实情况检查记录| 白雪公主国语免费观看中文版| 潜行在线观看| 老大不小在线观看免费完整版| 林丹出轨视频|