1. 程式人生 > 其它 >【網路程式設計】學習筆記--02 套接字型別與協議設定

【網路程式設計】學習筆記--02 套接字型別與協議設定

首先要清楚什麼是協議(protocol)?

  簡言之,協議就是為了完成資料交換而定好的約束。

回顧我們在《學習筆記 --01》中建立套接字socket中的程式碼:

#include<sys/socket.h>
int socket(int domain,int type,int protocol)
    |
    |- domain   套接字中使用的協議族(Protocol Family)資訊
    |- type     套接字資料傳輸型別資訊
    |- protocol 計算機間通訊中使用的協議資訊 

接下來我們將會根據該函式的引數進行具體展開討論:

1.協議族(domain/Protocal Family):

  這裡我們通常會用PF_INET 意思為 IPv4網際網路協議族

2.套接字型別(Type):

  套接字型別指的是套接字的資料傳輸方式。

  SOCK_STREAM:TCP(面向連線的套接字)。特點:傳輸過程中資料不會消失,按序傳輸資料,傳輸資料不存在邊界

  SOCK_DGRAM: UDP(面向訊息的套接字)。特點:速度快,但無法避免損失,存在資料邊界,資料邊界意味著接收資料的次數應和傳輸次數相同

3.協議的最終選擇(protocol):

  其實傳遞前2個引數即可建立所需的套接字。所以大部分情況下可以向第三個引數傳遞0,除非遇到以下情況:

    "同一協議族中存在多個數據傳輸方式相同的協議”

  暨資料傳輸方式相同,但協議不同,此時需要通過第三個引數具體指定協議資訊。

  若是TCP的話,則為IPPROTO_TCP

  若是UDP的話,則為IPPROTO_UDP

最終成果展示如下:

面向連線的套接字:
int tcp_socket = socket(PF_INET,SOCK_STREAM,IPPROTO_TCP)

面向訊息的套接字:
int udp_socket = socket(PF_INET,SOCK_DGRAM,IPPROTO_UDP)
Codeforces ID:Anonytt QQ: 847399102 可以新增&關注