gpt4 book ai didi

c - 如何在不堆叠旧数据的情况下接收UDP数据

转载 作者:太空宇宙 更新时间:2023-11-03 23:30:56 26 4
gpt4 key购买 nike

我正在通过 UDP 协议(protocol)从一个 c 程序向另一个程序发送数据

当接收到数据时,我处理字符串并在我的函数中使用它,问题是,如果我没有时间接收新数据,因为我的函数需要更多时间才能完成,数据将堆叠起来,然后我将不得不处理旧数据,而不是处理最近的数据,这是我的实际数据目标是实时处理

谁能帮我解决这个问题?

这是我的接收码:

addr_len = sizeof their_addr;
if ((numbytes = recvfrom(sockfd, ubuf, 6 , 0,(struct sockaddr *)&their_addr, &addr_len)) == -1)
{
perror("recvfrom");
//exit(1);
}

inet_ntop(their_addr.ss_family,get_in_addr((struct sockaddr *)&their_addr),s, sizeof s);

//printf("listener: packet is %d bytes long\n", numbytes);

ubuf[numbytes] = '\0';
printf("listener: packet contains \"%s\"\n", ubuf);

最佳答案

如果您的目标是实时,那么您不能在处理每个数据包上花费那么长时间。

如果这样做,那么您将始终“迟到”,并且基本上会丢弃发送给您的大部分数据,这似乎毫无意义且损坏。

仍然,解决它的一种方法可能是实现一个后台线程来为传入的数据提供服务,并为其添加时间戳并将其放入某种队列中。然后,您的“工作”线程可以从队列中轮询数据,并丢弃已经停留太久的数据包。

不过,这并不是真正的“实时”,而是……很奇怪。

关于c - 如何在不堆叠旧数据的情况下接收UDP数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15632978/

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