TCP、UDP套接字的数据传输
tcp發(fā)送數(shù)據(jù):
1 #include <sys/types.h> 2 #include <socket.h> 3 ssize_t send(int sockfd,const void *msg,size_t len,int flags);? ? 函數(shù)send只能對面向連接的套接字使用。參數(shù)sockfd為已經(jīng)建立好連接的套接字描述符。參數(shù)msg指向待發(fā)送數(shù)據(jù)的緩沖區(qū),參數(shù)len為代發(fā)數(shù)據(jù)的長度。參數(shù)flags為控制選項:
-
MSG_OOB:在指定的套接字上發(fā)送帶外數(shù)據(jù)(out-of-band data),該類型的套接字必須支持帶外數(shù)據(jù)(如SOCK_STREAM)。
-
MSG_DONTROUTE:通過最直接的路徑發(fā)送數(shù)據(jù),而忽略下層協(xié)議的路由設(shè)置。
PS:函數(shù)執(zhí)行成功只是說明數(shù)據(jù)寫入套接字的緩沖區(qū)中,并不表示數(shù)據(jù)已經(jīng)成功地通過網(wǎng)絡(luò)發(fā)送到目的地。
tcp接收數(shù)據(jù):
#include <sys/types.h> #include <sys/socket.h> ssize_t recv(int sockfd,void *buf,size_t len,int flags);? ? 函數(shù)從sockfd接受數(shù)據(jù)并保存到參數(shù)buf中,參數(shù)len為緩沖區(qū)的長度。(只能是面向連接的套接字)參數(shù)flags為控制選項:
-
MSG_OOB:請求接受帶外數(shù)據(jù)。
-
MSG_PEEK:只查看數(shù)據(jù)而不讀出。
-
MSG_WAITALL:只在接受緩沖區(qū)滿時才返回。
如果一個數(shù)據(jù)報太長以至于無法完全放下時,剩余部分將可能丟棄。如果在指定的套接字上無數(shù)據(jù)到達時,recv函數(shù)將阻塞。成功返回收到的字節(jié)數(shù),出錯-1,錯誤代碼errno。
UDP發(fā)送數(shù)據(jù):
#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);函數(shù)sendto的功能和send類似,但函數(shù)sendto不需要套接字一定是面向連接的,所以該函數(shù)主要用來發(fā)送UDP數(shù)據(jù)。參數(shù)to指定目的地地址。
UDP接收數(shù)據(jù):
#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);函數(shù)recvfrom與函數(shù)recv類似,但recvfrom不要求套接字一定是面向連接的。如果參數(shù)from非空,且該套接字不是面向連接的,則函數(shù)返回時,參數(shù)from中將保存數(shù)據(jù)的源地址。
關(guān)閉套接字:
#include <unistd.h> int close(int fd); #include <sys/socket.h> int shutdown(int s,int how);參數(shù)how的取值:
-
SHUT_RD:將連接的讀通道關(guān)閉,接收緩沖區(qū)中的未讀取數(shù)據(jù)將丟棄,仍可以發(fā)送數(shù)據(jù)。
-
SHUT_WR:將連接的寫通道關(guān)閉,發(fā)送緩沖區(qū)中的為發(fā)送的數(shù)據(jù)丟棄,仍可以接收數(shù)據(jù)。
-
SHUT_REWR:讀寫通道都關(guān)閉。
-
成功0,出錯-1,errno。
?
轉(zhuǎn)載于:https://www.cnblogs.com/FootPrintofLeon/p/6492618.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的TCP、UDP套接字的数据传输的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: cocos2dx 3.x 蒙板 遮罩 点
- 下一篇: Jenkins 入门系列--jenkin