面向連線的套接字通訊

2021-05-23 02:33:50 字數 3099 閱讀 8098

面向連線的套接字通訊

1. 面向連線的套接字通訊工作流程

(1)伺服器先也能夠

socket

函式來建立乙個套接字,用這個套接字完成通訊的監聽。

(2)用

bind

函式來繫結乙個埠號和

ip位址。

(3)伺服器呼叫

listen

函式,使伺服器的這個埠和

ip處於監聽狀態,等待客戶機的連線。

(4)客戶機用

socket

函式建立乙個套接字,設定遠端

ip和埠。

(5)客戶機呼叫

connect

函式連線遠端計算機指定的埠。

(6)伺服器用

accept

函式來接收遠端計算機的連線,建立起於客戶機之間的通訊。

(7)建立連線以後,客戶機用

write

函式向socket

中寫入資料,也可以用

read

函式讀取伺服器傳送方來的資料。

(8)伺服器用

read

函式讀取客戶機傳送來的資料,也可以用

write

函式來傳送資料。

(9)完成通訊以後,用

close

函式關閉

socket

關閉連線。

3.繫結埠

繫結埠指的是將套機字與指定的埠相連。繫結埠函式

bind

。int bind(int sockfd, struct sockaddr *myaddr, int addrlen);

引數列表:

sockfd

:已經建立的

socket

編號,sockaddr

:是乙個指向

sockaddr

結構體型別的指標。在使用這個函式之前,需包含標頭檔案、。

4.監聽與連線

監聽:指的是

socket

的埠處於等待狀態,如果有客戶端有連線請求,這個埠會接受這個連線。

(1)等待監聽函式

int listen(int s, int backlog);

引數列表:

s是已經建立的

socket

,backlog

是能同時處理得最大連線要求。

(2)接受連線函式

伺服器處於監聽狀態時,如果獲得客戶機的請求,會將這個請求放在等待佇列中。當系統空閒時,將處理客戶機的連線請求。

int accept(int s, struct sockaddr *addr, int *addrlen);

當accept

函式接受乙個連線時,會返回乙個新的

socket

編號。以後的資料傳輸與讀取就是通過這個新的

socket

編號來處理的。

(3)請求連線函式

請求連線:指的是客戶機需要向伺服器傳送資訊時,需要傳送乙個連線請求。

int connect (int sockfd, struct sockaddr *serv_addr,int addrlen);

5.資料的傳送和接收

(1)資料接受函式

函式recv

可以接收遠端主機傳送來的資料,並把這些資料儲存到乙個陣列中。

int recv

(int s, void *buf,int len,unsigned int flags);

引數:flags

一般設定為

0,其他可能的賦值與含義如下所示:

msg_oob

:接收以

out-of-band

送出的資料。

msg_peek

:返回來的資料並不會在系統內刪除,如果再呼叫

recv

時會返回相同的資料內容。

msg_waitall

:強迫接收到

len大小的資料後才能返回,除非有錯誤或訊號產生。

msg_nosignal

:此操作被

sigpipe

訊號中斷。

該函式會返回接收到的字元數,如果錯誤則會返回-1。

(2)資訊傳送函式

send 用

connect

函式連線到遠端計算機以後,可以用

send

函式將資訊傳送到對方的計算機。

int send(int s, const void *msg, int len, unsigned int flags);

引數:flags

一般設定為

0,其他可能的賦值與含義如下所示:

msg_oob

:傳送的資料以

out-of-band

方式送出。

msg_dontroute

:取消路由表查詢。

msg_dontwait

:設定為不可阻斷傳輸。

msg_nosignal

:此傳輸不可被

sigpipe

訊號中斷。

該函式會返回已傳送的字元數,如果錯誤則會返回-1。

(3)資料傳輸函式

wirte

與read

socket

建立以後,向這個

socket

中寫入資料表示向遠端主機傳送資料,從

socket

中讀取資料相當於接受遠端主機傳送過來的資料。

size_twrite(int fd, const void *buf, size_t count);

size_tread(int fd, void *buf, size_t count);

引數列表:

fd是已經建立的

socket

,buf

是指向一段記憶體的指標,

count

表示buf

指向記憶體的長度。

read

函式讀取位元組時,會把讀取的內容儲存到

buf指向的記憶體中,然後返回讀取到位元組的個數,使用

write

函式傳輸資料時,會把

buf指標指向的記憶體中的資料傳送到

socket

連線的遠端主機,然後返回實際傳送位元組的個數。需包含標頭檔案

套接字通訊

利用三元組 ip位址,協議,埠 就可以標識網路的程序 socket即是一種特殊的檔案,一些socket函式就是對其進行的操作 讀 寫io 開啟 關閉 socket是 open write read close 模式的一種實現,那麼socket就提供了這些操作對應的函式介面 tcp通訊中的socket...

套接字通訊

套接字家族的名字 af unix unix一切皆檔案,基於檔案的套接字呼叫的就是底層的檔案系統來取資料,兩個套接字程序執行在同一機器,可以通過訪問同乙個檔案系統間接完成通訊 套接字家族的名字 af inet 還有af inet6被用於ipv6,還有一些其他的位址家族,不過,他們要麼是只用於某個平台,...

監聽套接字 連線套接字

摘要 對於伺服器程式設計中最重要的一步等待並接受客戶的連線,那麼這一步在程式設計中如何完成,accept函式就是完成這一步的。它從核心中取出已經建立的客戶連線,然後把這個已經建立的連線返回給使用者程式,此時使用者程式就可以與自己的客戶進行點到點的通訊了。accept函式等待並接受客戶請求 inclu...