程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> TCP、UDP套接字的數據傳輸

TCP、UDP套接字的數據傳輸

編輯:關於C++

TCP、UDP套接字的數據傳輸。本站提示廣大學習愛好者:(TCP、UDP套接字的數據傳輸)文章只能為提供參考,不一定能成為您想要的結果。以下是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。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved