gpt4 book ai didi

c - UDP 数据包未传递 - recvfrom() 永远不会返回

转载 作者:行者123 更新时间:2023-11-30 17:39:37 24 4
gpt4 key购买 nike

我设置了一个 UDP 接收器,如下:

   int rx_socket;
struct sockaddr_in my_addr;
struct sockaddr_in rem_addr;
socklen_t addrlen = sizeof(rem_addr);

rx_socket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);

my_addr.sin_addr.s_addr = htonl(INADDR_ANY);
my_addr.sin_family = AF_INET;
my_addr.sin_port = htons(9900);

rc = bind(rx_socket, (struct sockaddr *) &(my_addr), sizeof(my_addr));
if (!rc) {
printf("BIND SUCCESSFULL\n");
}

char buf[250];

while(1) {
printf("WAITING\n");
recvfrom(rx_socket, buf, sizeof(buf), 0, (struct sockaddr *)&rem_addr, &addrlen);
printf("RECEIVED\n");
}

recvfrom() 永远不会返回。我做了一些 Wireshark 分析,它表明数据包在那里:

摘要:

用户数据报协议(protocol),源端口:57506 (57506),目标端口:iua (9900)

校验和:0x14a2 [禁用验证]

数据(8字节)

<小时/>

任何帮助将不胜感激。

编辑:

一个有趣的观察结果是,源(即 DSP)无法发送数据包,即 sendto() 返回 -1,直到我从目标 ping 到它。 ping 之后,源就可以开始传输数据包。

编辑2:

这是发件人的代码:

    int fd;
fd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);

struct sockaddr_in my_addr;

my_addr.sin_family = AF_INET;
my_addr.sin_port = htons(9900);
inet_aton("10.0.201.102", &(my_addr.sin_addr));

char buf[250];

for (;;) {
int bytesSent = sendto(fd, buf, 8, 0,
(struct sockaddr *) &(my_addr), sizeof(my_addr));
printf("sent: %d bytes\n", bytesSent);
sleep(1000);
}

最佳答案

所以问题出在 virtualbox 上。我的发送者在主机上,但接收者在虚拟机上。如果我也在主机上运行接收器,则会收到 UDP 数据包。

关于c - UDP 数据包未传递 - recvfrom() 永远不会返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21762755/

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