BSD Socket的收發資料函式介紹

2021-06-15 01:47:08 字數 1851 閱讀 8780

csdn火木達人

建立好了socket連線之後,我們就可以把得到的fd當作檔案描述符來使用,一下三種方式可用於socket資料收發

1.connect() + write() + read() : 適用於tcp

標頭檔案:

#include

#include

#include

ssize_t write(int d,const void *buf,size_t nbytes);

呼叫成功返回成功寫入的位元組數,呼叫失敗則返回-1。

引數1為物件的控制代碼;

引數2是寫入的內容;

引數3是前者的大小。

ssize_t read(int d,void *buf,size_t nbytes);

正常呼叫返回成功讀入的位元組數,當讀到控制代碼物件的底部時返回0,呼叫失敗返回-1。

引數1為物件控制代碼;

引數2是讀入容器的位址;

引數3是前者的大小。

2.sendto() + recvfrom() : 適用於tcp、udp,多數用於udp

標頭檔案:

#include

#include

ssize_t sendto(int s,const void *msg,size_t len,int flags,const struct sockaddr *to,socklen_t tolen);

呼叫成功返回成功寫入的位元組數,呼叫失敗則返回-1。

引數1是套接字控制代碼;

引數2是需要傳送的資料;

引數3是前者的大小;

引數4是特殊傳輸標識,其值多為0;

引數5是傳送目的地的sockaddr結構主機位址的指標值;

引數6是前者的長度。

ssize_t recvfrom(int s,void *buf,size_t len,int flags,struct sockaddr *from,socklen_t *fromlen);

正常呼叫返回成功讀入的位元組數,呼叫失敗返回-1。

引數1是套接字控制代碼;

引數2是成功接收到遠端傳輸過來後的資料時放入的變數位址;

引數3是前者的大小;

引數4是特殊傳輸標識,其值多為0;

引數5是接收到的資料的傳送端的sockaddr結構主機位址的指標值;

引數6是前者長度的位址值。

3.connect() + send() + recv() : 適用於tcp、udp,多數用於tcp

標頭檔案:

#include

#include

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

呼叫成功返回成功寫入的位元組數,呼叫失敗則返回-1。

引數1是套接字控制代碼;

引數2是需要傳送的資料;

引數3是前者的大小;

引數4是特殊傳輸標識,其值多為0。

ssize_t recv(int s, void *buf, size_t len, int flags);

正常呼叫返回成功讀入的位元組數,呼叫失敗返回-1。

引數1是套接字控制代碼;

引數2是成功接收到遠端傳輸過來後的資料時放入的變數位址;

引數3是前者的大小;

引數4是特殊傳輸標識,其值多為0。

send和recv的第四個引數也可以是以下的組合

msg_dontroute:不查詢路由表

msg_oob:接受或傳送帶外資料

msg_peek:檢視資料,並不從系統緩衝區移走資料

msg_waitall : 等待任何資料

msg_dontwait : 僅本操作非阻塞 

假如flags為0,則和read,write相同的操作

Socket收發資料

client write server client read 位元組數writebyte unsignedbyte readunsignedbyte 1 writelengthstring string readstring writebyte byte readbyte 1 writeunsig...

Linux C UDP資料收發

基於udp的通訊時不可靠地,面向無連線的,傳送的資料無法確切知道對方收到沒有,通常用於對可靠性要求不高的通訊中,使用簡單,udp沒有嚴格區分server端和client端,唯一的區別是綁不繫結 bind 埠。1,接收程式 server include include include include ...

socket資料收發

socket讀寫 tcp協議是面向流的,read和write呼叫的返回值往往小於引數指定的位元組數。對於read呼叫,如果接收緩衝區中有20位元組,請求讀100個位元組,就會返回20。對於write呼叫,如果請求寫100個位元組,而傳送緩衝區中只有20個位元組的空閒位置,那麼write會阻塞,直到把...