在 Windows 系统下使用 UDP recvfrom 函数可以通过以下步骤实现:

  1. 引入头文件:
#include <Winsock2.h>
  1. 初始化 Winsock 库:
WSADATA wsaData;
if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) {
    // 初始化失败
    return -1;
}
  1. 创建套接字:
SOCKET sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if (sock == INVALID_SOCKET) {
    // 套接字创建失败
    return -1;
}
  1. 绑定本地地址和端口:
struct sockaddr_in local_addr;
local_addr.sin_family = AF_INET;
local_addr.sin_port = htons(port); // 端口号
local_addr.sin_addr.s_addr = INADDR_ANY;
if (bind(sock, (struct sockaddr*)&local_addr, sizeof(local_addr)) == SOCKET_ERROR) {
    // 绑定失败
    closesocket(sock);
    return -1;
}
  1. 接收数据:
struct sockaddr_in remote_addr;
int addr_len = sizeof(remote_addr);
char buf[1024];
int len = recvfrom(sock, buf, sizeof(buf), 0, (struct sockaddr*)&remote_addr, &addr_len);
if (len == SOCKET_ERROR) {
    // 接收失败
    closesocket(sock);
    return -1;
}
  1. 关闭套接字和 Winsock 库:
closesocket(sock);
WSACleanup();

注意事项:

  • Windows 系统下需要先初始化 Winsock 库,使用完后需要清理;
  • 接收函数 recvfrom 的参数中需要传入远端地址和端口的信息,可以通过传入一个 sockaddr_in 类型的结构体指针来获取;
  • 接收函数返回接收到的数据长度,如果返回 SOCKET_ERROR 则表示接收失败;
  • 在使用完套接字后需要关闭它。
windows 系统下 udp recvfrom 用法

原文地址: https://www.cveoy.top/t/topic/bZbY 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录