日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

TCP、UDP套接字的数据传输

發布時間:2023/12/1 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 TCP、UDP套接字的数据传输 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

tcp發送數據:

1 #include <sys/types.h> 2 #include <socket.h> 3 ssize_t send(int sockfd,const void *msg,size_t len,int flags);

? ? 函數send只能對面向連接的套接字使用。參數sockfd為已經建立好連接的套接字描述符。參數msg指向待發送數據的緩沖區,參數len為代發數據的長度。參數flags為控制選項:

  • MSG_OOB:在指定的套接字上發送帶外數據(out-of-band data),該類型的套接字必須支持帶外數據(如SOCK_STREAM)。

  • MSG_DONTROUTE:通過最直接的路徑發送數據,而忽略下層協議的路由設置。

PS:函數執行成功只是說明數據寫入套接字的緩沖區中,并不表示數據已經成功地通過網絡發送到目的地。

tcp接收數據:

#include <sys/types.h> #include <sys/socket.h> ssize_t recv(int sockfd,void *buf,size_t len,int flags);

? ? 函數從sockfd接受數據并保存到參數buf中,參數len為緩沖區的長度。(只能是面向連接的套接字)參數flags為控制選項:

  • MSG_OOB:請求接受帶外數據。

  • MSG_PEEK:只查看數據而不讀出。

  • MSG_WAITALL:只在接受緩沖區滿時才返回。

    如果一個數據報太長以至于無法完全放下時,剩余部分將可能丟棄。如果在指定的套接字上無數據到達時,recv函數將阻塞。成功返回收到的字節數,出錯-1,錯誤代碼errno。

UDP發送數據:

#include <sys/types.h> #include <sys/socket.h> ssize_t sendto(int sockfd,const void *msg,size_t len,int flags,const struct sockaddr *to,socklen_t tolen);

函數sendto的功能和send類似,但函數sendto不需要套接字一定是面向連接的,所以該函數主要用來發送UDP數據。參數to指定目的地地址。

UDP接收數據:

#include <sys/types.h> #include <sys/socket.h> ssize_t recvfrom(int sockfd,void *buf,size_t len,int flags,struct sockaddr *from,socklen_t *fromlen);

函數recvfrom與函數recv類似,但recvfrom不要求套接字一定是面向連接的。如果參數from非空,且該套接字不是面向連接的,則函數返回時,參數from中將保存數據的源地址。

關閉套接字:

#include <unistd.h> int close(int fd); #include <sys/socket.h> int shutdown(int s,int how);

參數how的取值:

  • SHUT_RD:將連接的讀通道關閉,接收緩沖區中的未讀取數據將丟棄,仍可以發送數據。

  • SHUT_WR:將連接的寫通道關閉,發送緩沖區中的為發送的數據丟棄,仍可以接收數據。

  • SHUT_REWR:讀寫通道都關閉。

  • 成功0,出錯-1,errno。

?

轉載于:https://www.cnblogs.com/FootPrintofLeon/p/6492618.html

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的TCP、UDP套接字的数据传输的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。