網絡編程學習筆記 二- 套接字協議及數據傳輸特性

int socket(int domin, int type, int protocol)   //Linux下創建套接字函數
SOCKET socket(int af, int type, int protocol)   //Windows創建套接字函數

上邊兩個函數均是創建套接字的函數,其實這兩個函數的形參都一樣,這兩個函數唯一不同的地方就在於函數的返回值類型不同。Windows上用SOCKET結構體保存返回值類型(其實可以用int,但爲了以後的擴展性,就用SOCKET把)

這些的形參分別代表什麼呢?

協議族

兩個創建socket函數的第一個形參均爲協議族,那麼都有哪些協議族呢?

名稱 協議族
PF_INET IPv4互聯網協議族
PF_INET6 IPv6互聯網協議族
PF_LOCAL 本地通信的UNIX協議族
PF_PACKET 底層套接字的協議族
PF_IPX IPX Novell協議族

套接字類型

函數中的第二個參數,指的就是套接字類型,套接字類型有一下幾個:

面向連接的套接字(SOCK_STREAM)

面向連接的套接字有以下特點:
1. 傳輸過程中數據不會消失
2. 按序傳輸數據
3. 傳輸的數據不存在數據邊界

面向消息的套接字(SOCK_DGRAM)

特點如下:
1. 強調快讀傳輸而非順序傳輸
2. 傳輸的數據可能丟失也可能損毀
3. 傳輸的數據有數據邊界
4. 限制每次傳輸的數據大小

什麼是數據邊界
收發數據的套接字內部有緩衝(buffer),通過套接字傳輸的數據將保存到此處。因此收到數據並不意味着馬上讀取數據,有可能在緩衝區充滿後一次性取走,也有可能多次讀取。

第三個參數

這個參數決定最終採用的協議,雖然前兩個參數已經設定了協議族和套接字數據傳輸方式,但是同一個協議族中很可能有多個傳輸方式一樣的協議,此時,我們就需要制定協議了,例如:
TCP協議 : IPPROTO_TCP
UDP協議 : IPPROTO_UDP

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章