首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

Beej's Guide to Network Programming 系列第15篇:無連接數據報套接字的 sendto() 與 recvfrom()

     編輯:關於C語言

上一篇:Beej's Guide to Network Programming 系列第14篇

5.8 sendto() 與 recvfrom() —— 數據報通信的核心

既然數據報套接字(Datagram Socket)不需要建立連接,那麼在發送數據包之前,我們必須知道目標地址。這就是 sendto() 和 recvfrom() 兩個函數的用武之地。

sendto() 函數原型

int sendto(int sockfd, const void *msg, int len, unsigned int flags,
           const struct sockaddr *to, socklen_t tolen);

參數說明:

  • sockfd:套接字描述符。
  • msg:要發送的數據緩衝區。
  • len:數據長度。
  • flags:標誌位,通常設為 0。
  • to:指向 struct sockaddr 的指針,包含目標 IP 地址和端口。
  • tolen:地址結構的大小,通常設為 sizeof(struct sockaddr)。

返回值:成功返回實際發送的字節數(可能小於請求發送的字節數),失敗返回 -1 並設置 errno。

recvfrom() 函數原型

int recvfrom(int sockfd, void *buf, int len, unsigned int flags,
             struct sockaddr *from, int *fromlen);

參數說明:

  • sockfd:套接字描述符。
  • buf:接收數據的緩衝區。
  • len:緩衝區大小。
  • flags:標誌位,通常設為 0。
  • from:指向 struct sockaddr 的指針,調用返回後將填入發送方的 IP 和端口。
  • fromlen:指向 int 的指針,初始值為 sizeof(struct sockaddr),返回時包含實際地址長度。

返回值:成功返回接收到的字節數,失敗返回 -1 並設置 errno。

這兩個函數讓無連接的 UDP 通信成為可能,是網絡編程中處理數據報的基石。

摘自 xiaobin_HLJ80 的專欄

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved