Python socket 詳解

Dus發表於2015-04-26
socket()函式用於根據指定的地址族、資料型別和協議來分配一個套介面的描述字及其所用的資源。如果協議protocol未指定(等於0),則使用預設的連線方式。
對於使用一給定地址族的某一特定套介面,只支援一種協議。但地址族可設為AF_UNSPEC(未指定),這樣的話協議引數就要指定了。協議號特定於進行通訊的“通訊域”。
 
 
建立一個套介面()。
#include <winsock.h>
SOCKET PASCAL FAR socket( int af, int type, int protocol);
af:一個地址描述。目前僅支援AF_INET格式,也就是說ARPA Internet地址格式。
type:指定socket型別。新套介面的型別描述型別,如TCP(SOCK_STREAM)和UDP(SOCK_DGRAM)。常用的socket型別有,SOCK_STREAM、SOCK_DGRAM、SOCK_RAW、SOCK_PACKET、SOCK_SEQPACKET等等。
protocol:顧名思義,就是指定協議。套介面所用的協議。如呼叫者不想指定,可用0。常用的協議有,IPPROTO_TCP、IPPROTO_UDP、IPPROTO_SCTP、IPPROTO_TIPC等,它們分別對應TCP傳輸協議、UDP傳輸協議、STCP傳輸協議、TIPC傳輸協議。
 
 
支援下述型別描述:
型別 解釋
SOCK_STREAM 提供有序的、可靠的、雙向的和基於連線的位元組流,使用帶外資料傳送機制,為Internet地址族使用TCP。
SOCK_DGRAM 支援無連線的、不可靠的和使用固定大小(通常很小)緩衝區的資料包服務,為Internet地址族使用UDP。
SOCK_STREAM型別的套介面為全雙向的位元組流。對於流類套介面,在接收或傳送資料前必需處於已連線狀態。用connect()呼叫建立與另一套介面的連線,連線成功後,即可用send()和recv()傳送資料。當會話結束後,呼叫closesocket()。帶外資料根據規定用send()和recv()來接收。
實現SOCK_STREAM型別套介面的通訊協議保證資料不會丟失也不會重複。如果終端協議有緩衝區空間,且資料不能在一定時間成功傳送,則認為連線中斷,其後續的呼叫也將以WSAETIMEOUT錯誤返回。
SOCK_DGRAM型別套介面允許使用sendto()和recvfrom()從任意埠傳送或接收資料包。如果這樣一個套介面connect()與一個指定埠連線,則可用send()和recv()與該埠進行資料包的傳送與接收。

相關文章