色偷偷偷亚洲综合网另类,亚洲欧美另类在线观看,欧美午夜激情在线,久久久精品一区

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

回到頂部

色偷偷偷亚洲综合网另类,亚洲欧美另类在线观看,欧美午夜激情在线,久久久精品一区
主站蜘蛛池模板: 精品久久久久久| 欧美激情一级精品国产| 久久精品视频播放| 国内精品久久久久久| 91亚洲午夜在线| 久久中文久久字幕| 性欧美激情精品| 亚洲视频免费一区| 久久久久五月天| 日韩av一区二区在线| 欧美另类在线观看| 91在线观看免费高清| www.日韩不卡电影av| 国产va免费精品高清在线观看| 亚洲有声小说3d| 欧美在线国产精品| 在线激情影院一区| 亚洲自拍偷拍网址| 欧美一区二区色| 欧美日韩国产一区在线| 亚洲第一视频网站| 欧美在线视频播放| 欧美成人性色生活仑片| 亚洲欧美在线播放| 国产色综合天天综合网| 欧美激情国内偷拍| 欧美成人精品三级在线观看| 亚洲综合在线小说| 日韩美女在线看| 久久久久久久久久久91| 久久夜色精品国产欧美乱| 中文字幕日本精品| 亚洲欧洲激情在线| 国产午夜精品全部视频在线播放| 国产在线播放不卡| 国产精品久久久久久av下载红粉| 亚洲一区二区三区毛片| 国产精品福利久久久| 国产日韩欧美综合| 亚洲最大av在线| 亚洲精品99久久久久|