gpt4 book ai didi

c - recvfrom() 即使是第一次调用的 UDP 消息也不填充发件人 IP 地址

转载 作者:太空狗 更新时间:2023-10-29 15:19:45 24 4
gpt4 key购买 nike

我正在使用 recvfrom() 将 UDP 数据报放入我的缓冲区,并传递非 NULL from_addr 结构和 len 参数,期望它获得源 IP。但是对于第一次调用,它们是 NULL。随后的调用正在填充地址结构和 len 字段。这是预期的吗?

#include <stdio.h>
#include <string.h>

#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>


int
main()
{
struct sockaddr_in myaddr, from_addr;
char from_ip[1024] = "", myip[2014] = "";
char rmsg[1024 * 1024] = "";
int sock_fd=-1,nbytes=0;
int len=0;
unsigned short port=0;

sock_fd = socket(AF_INET, SOCK_DGRAM, 0);
if(sock_fd == -1)
{
perror("Socket");
return -1;
}

printf("IP Addr & Port to bound to :");
scanf("%s%u", myip, &port);

myaddr.sin_family = AF_INET;
myaddr.sin_port = htons(port);
inet_pton(AF_INET, myip, &myaddr.sin_addr);

printf("Bound to %s:%u\n", myip, htons(port));

nbytes = bind(sock_fd, &myaddr, sizeof(myaddr));
if(nbytes == -1)
{
perror("Bind");
return -1;
}

do
{
/**/nbytes = recvfrom(sock_fd, rmsg, sizeof(rmsg), 0, &from_addr, &len);/**/
inet_ntop(AF_INET, &from_addr.sin_addr, from_ip, sizeof(from_ip));

printf("Received %d bytes from %s@%d : %s\n", nbytes, from_ip, ntohs(from_addr.sin_port), rmsg);

if(strcmp(rmsg, "Bye") == 0)
{
printf("Client Disconnected.\n");
}
memset(rmsg, 0, sizeof(rmsg));
}while(1);

return 0;
}

输出:

-------------------------------OutPut -----------------------------------------
root@ubuntu:/home/akumarkk/Desktop/distributedComp_Project/test# ./userver
IP Addr & Port to bound to :127.0.0.1 12
Bound to 127.0.0.1:3072
Received 2 bytes from 0.0.0.0@0 : hi
Received 6 bytes from 127.0.0.1@49511 : second
Received 7 bytes from 127.0.0.1@49511 : message
Received 3 bytes from 127.0.0.1@49511 : Bye
Client Disconnected.

最佳答案

你必须在调用recvfrom之前填充len,你不能将其保留为0:

len = sizeof from_addr;
nbytes = recvfrom(sock_fd, rmsg, sizeof(rmsg), 0, &from_addr, &len);

关于c - recvfrom() 即使是第一次调用的 UDP 消息也不填充发件人 IP 地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23472533/

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