windows 系统下 udp recvfrom 用法
在 Windows 系统下使用 UDP recvfrom 函数可以通过以下步骤实现:
- 引入头文件:
#include <Winsock2.h>
- 初始化 Winsock 库:
WSADATA wsaData;
if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) {
// 初始化失败
return -1;
}
- 创建套接字:
SOCKET sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if (sock == INVALID_SOCKET) {
// 套接字创建失败
return -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;
}
- 接收数据:
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;
}
- 关闭套接字和 Winsock 库:
closesocket(sock);
WSACleanup();
注意事项:
- Windows 系统下需要先初始化 Winsock 库,使用完后需要清理;
- 接收函数 recvfrom 的参数中需要传入远端地址和端口的信息,可以通过传入一个 sockaddr_in 类型的结构体指针来获取;
- 接收函数返回接收到的数据长度,如果返回 SOCKET_ERROR 则表示接收失败;
- 在使用完套接字后需要关闭它。
原文地址: https://www.cveoy.top/t/topic/bZbY 著作权归作者所有。请勿转载和采集!