gpt4 book ai didi

c - recvfrom() 未接收完整缓冲区

转载 作者:行者123 更新时间:2023-11-30 19:01:36 25 4
gpt4 key购买 nike

在基于客户端-服务器架构的设置中,我的客户端通过大小为 116 字节的 UDP 套接字发送数据。但在服务器端,程序只接收24个字节。如有任何帮助,我们将不胜感激。

我尝试使用wireshark捕获数据包。但包裹看起来完好无损。但在服务器(接收)端缓冲区数据丢失。我怀疑我的recvfrom()出了点问题

//Client sends data
uint32_t final_cmd[DISC_REQ_SIZE] = {0};
..
..
n = sendto(sockfd, (const char *) final_cmd, sizeof(final_cmd), 0,
(struct sockaddr *) &serveraddr, ser_len);


//Server receives data
uint32_t buffer[BUFSIZE];
..
..
while(1)
{
bzero(buffer, BUFSIZE);
n = recvfrom(sockfd, buffer, BUFSIZE,
0, ( struct sockaddr *) &cliaddr,
&len);
..
..

预期结果:服务器接收完整的116 B数据实际结果:服务器只收到24B数据

最佳答案

recvfrom 的第三个参数(长度)需要缓冲区的长度(以字节为单位),但您要传递元素的数量。

尝试改变

n = recvfrom(sockfd, buffer, BUFSIZE, ...

n = recvfrom(sockfd, buffer, sizeof buffer, ...

此外,在现代系统上不要使用 bzero (已弃用),而是:

memset(buffer, 0, sizeof buffer);

关于c - recvfrom() 未接收完整缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57588099/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com