我正在用 C++ 编写一个客户端应用程序以通过 UDP 广播接收二进制数据,但是无论缓冲区大小如何,我都无法接收前 4 个字节以外的任何内容。我检查了 Wireshark 中的数据包,我可以看到我的机器正在接收大约 1200 字节的数据。当我将此与我的客户端接收的内容进行比较时,我可以看到我正在获取数据包,但是剩余的数据丢失了。这是我的代码:
#define BUFFERSIZE 4096
int main()
{
struct addrinfo hints, *servinfo, *p;
int sockfd, i, nbyt;
int *buf = (int*) malloc(BUFFERSIZE);
memset(&hints, 0, sizeof hints);
hints.ai_family = AF_INET;
hints.ai_socktype = SOCK_DGRAM;
hints.ai_flags = AI_PASSIVE;
getaddrinfo(NULL, "9011", &hints, &servinfo);
sockfd = socket(servinfo->ai_family, servinfo->ai_socktype, servinfo->ai_protocol);
bind(sockfd, servinfo->ai_addr, servinfo->ai_addrlen);
FILE *file;
file = fopen("file.txt", "w+");
for (i=0;i<=45;i++)
{
nbyt = recv(sockfd, buf, BUFFERSIZE, 0);
fprintf(file, "%s %d; %s %x\n", "Bytes received:", nbyt, "Message:", *buf);
}
fclose(file);
close(sockfd);
free(buf);
printf("%s\n", "Execution ended.");
return 0;
}
我收到的一些数据的示例:
Bytes received: 1131; Message: 5b0
Bytes received: 1131; Message: 5b3
Bytes received: 1131; Message: 5b6
Bytes received: 1092; Message: 4e0
我尝试使用标志将套接字设置为非阻塞MSG_DONTWAIT
,因为这解决了类似 Python 应用程序的问题,但是这只返回错误:
Bytes received: -1; Message: 0
我对 C++ 和套接字比较陌生,所以可能有一些我没有看到的东西。希望有人可以帮助我找出问题所在?如有必要,我可以提供更多信息。