基本套接字函式

2021-08-05 19:07:56 字數 1773 閱讀 6001

一、socket函式

為了執行網路i/o,乙個程序必須做的第一件事就是呼叫socket函式,指定期望的通訊協議型別。

int socket(int family,int type,int protocol);//成功則返回正數,出錯返回-1

sockfd=socket(af_inet,sock_stream,0)

引數faminly :af_inet(ipv4協議),af_inet6(ipv6協議)

type: sock_stream

(位元組流套接字) 、sock_dgram

(資料報套接字)

二、connect函式

tcp客戶通過connect函式與tcp伺服器建立連線。

int

connect(int sockfd,const struct sockaddr *servaddr,socklen_t addrlen)

connect(sockfd,(sa*)&servaddr,sizeof(servaddr)

sockfd 是由socket函式返回的套接字描述符,第二個、第三個引數分別是乙個 指向 位址結構的指標和該結構的大小。

套接字位址結構必須含有伺服器的ip位址和埠號。

客戶在呼叫connect 函式前不必非得呼叫bind函式,因為如果需要的話,核心會確定源ip位址,並選擇乙個臨時埠。

二、bind函式

bind函式把乙個本地協議位址賦予乙個套接字。對於網際網協議,協議位址是 32位的ipv4位址與16位的tcp埠號的組合。

如果乙個tcp客戶或伺服器未曾呼叫bind**乙個介面,當呼叫connect或listen時,核心就為相應的套接字選擇乙個臨時介面。讓核心選擇臨時介面對於客戶端是正常的。伺服器是必須要繫結他們眾所周知的埠的。

int bind(int sockfd,const

struct sockaddr *myaddr,socklen_t addrlen);

三、listen函式

listen函式僅由tcp伺服器呼叫,它做兩件事。

(1)當socket函式建立乙個套接字時,它被假設為乙個主動套接字,也就是它是乙個將要呼叫connect發起連線的客戶端套接字。listen函式把乙個未連線的套接字轉換成乙個被動套接字,指示核心應當接受指向該套接字的連線請求。

(2)本函式的第二個引數規定了核心為相應的套接字設定的排隊的最大連線個數。

int listen(int sockfd,int backlog);//backlog為相應套接字排隊的最大連線個數。
四、accept 函式

int

accept(int sockfd,struct sockaddr *cliaddr,socklen_t *addrlen);

accept函式是由tcp伺服器呼叫,用於從已完成連線佇列對頭返回下乙個已完成連線。如果已完成連線隊列為空,那麼程序被投入睡眠。

int

accept(int sockfd,struct socksddr_

*cliaddr,socklen_t *addrlen);

如果accept成功,那麼 其返回值是由核心自動生成的乙個全新描述符,即為已連線套接字,核心為每個伺服器程序接受的客戶連線建立乙個已連線套接字。當伺服器完成對某個給定客戶的服務時,相應的已連線套接字就會被關閉。

已連線套接字在每次迴圈中關閉,但監聽套接字在伺服器的整個有效期都保持開放。

基本套接字呼叫

linux支援伯克利 bsd 風格的套接字程式設計。它同時支援面向連線和無連線型別的套接字。在面向連線的通訊中,伺服器和客戶機在交換資料之前要先建立乙個連線。在無連線通訊中資料被作為資訊的一部分被交換。無論哪一種方式,伺服器總是最先啟動,把自己繫結 banding 在乙個套接字上然後偵聽資訊。伺服器...

基本套接字程式設計(7) udp篇

udp 是user datagram protocol的簡稱,中文名是使用者資料報協議,是osi open system interconnection,開放式系統互聯 參考模型中一種無連線的傳輸層協議,提供面向事務的簡單不可靠資訊傳送服務,ietf rfc 768是udp的正式規範。udp在ip報...

python套接字 python套接字基本使用

socket socket通常也稱作 套接字 用於描述ip位址和埠,應用程式通常通過 套接字 向網路發出請求或者應答網路請求,可以認為是一種計算機網路的資料結構,介面。它是網路程式設計的基礎 套接字還分為面向連線的和無連線的 第一種是指tcp型別套接字,在通訊前需要建立連線,這種連線是較為可靠的,使...