5.7 send()和 recv() ---跟我說話,寶貝!

原文:https://beej.us/guide/bgnet/html/#sendrecv

 

5.7 send()和 recv() ---跟我說話,寶貝!

       這兩個函數用於流式套接字的通訊。

 

   send()函數:

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

 sockfd 是你想發送數據的套接字描述符(或者是調用 socket()/accept() 返回的)。

msg 是指向你想發送的數據的指針。

len是數據的長度。

把 flags 設置爲 0 就可以了。

   示例代碼:

char *msg = “Beejwas here!”;

int len, bytes_sent;

.

.

.

len = strlen(msg);

bytes_sent =send(sockfd, msg, len, 0);

  send() 返回實際發送的數據的字節數--它可能小於你要求發送的數目!

注意,有時候你告訴它要發送一堆數據可是它不能處理成功。

它只是發送它可能發送的數據,然後希望你能夠發送其它的數據。

記住,如果 send() 返回的數據和 len 不匹配,你就應該發送其它的數據。

但是這裏也有個好消息:如果你要發送的包很小(小於大約 1K),它可能處理讓數據一次發送完。

最後要說得就是,它在錯誤的時候返回-1,並設置 errno。

 

   recv()函數原型:

int recv(int sockft, void *buf, int len, int flags);

sockfd 是要讀的套接字描述符。

buf 是要讀的信息的緩衝。

len 是緩衝的最大長度。

flags 可以設置爲0。

recv() 返回實際讀入緩衝的數據的字節數;或者在錯誤的時候返回-1, 同時設置 errno。

 

  很簡單,不是嗎? 你現在可以在流式套接字上發送/接收數據了。

  現在你是 Unix 網絡程序員了!

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章