在基于客户端-服务器体系结构的设置中,我的客户端通过UDP套接字发送数据,该套接字大小为116字节。但是在服务器端,该程序仅接收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数据 实际结果:服务器仅接收24 B数据
答案 0 :(得分:1)
recvfrom
的第三个参数(长度)需要缓冲区的长度(以字节为单位),但是您正在传递元素数。
尝试更改
n = recvfrom(sockfd, buffer, BUFSIZE, ...
到
n = recvfrom(sockfd, buffer, sizeof buffer, ...
此外,在现代系统上,请勿使用bzero
(已弃用),而是:
memset(buffer, 0, sizeof buffer);