gpt4 book ai didi

c - Linux:UDP 接收消息比发送消息慢

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:08:27 24 4
gpt4 key购买 nike

我正在使用基于 arm-cpu 的板,运行带有内核 Linux 版本 2.6.12.3-a9-17 的 uclinux,以使用 UDP 协议(protocol)通过 eithernet 从 PC 接收数据。

我的问题是,在板子上,虽然我可以收到所有消息(没有丢失),但传入消息之间的时间间隔最多限制为 20ms。也就是说,如果我每 30 毫秒发送一次消息,则一切正常。但是,如果我每 10 毫秒发送一次消息,开发板每 20 毫秒显示一次传入的 UDP 包(因此 PC 接收所有消息所用的时间将是其两倍)。

我正在使用这些代码来测量两条传入消息之间的时间间隔:

struct timeval tnew, told, dt;
gettimeofday(&tnew,0);
told = tnew;

while (1) {
memset(buf, 100, 0);
int recvlen = recvfrom(fd, buf, 100 , 0,
(struct sockaddr *)&addr_recv, &addr_len);
if (recvlen>0) {
gettimeofday(&tnew ,0);
timersub(&tnew,&told,&dt);
told = tnew;
printf("UDP intput: %fms, string:%s\n", (float)dt.tv_usec / 1000.0,buf);
}

结果如下:

在电脑上:

UDP output: 10.019000ms, string: 353:ABCDEFG
UDP output: 10.067000ms, string: 354:ABCDEFG
UDP output: 10.068000ms, string: 355:ABCDEFG
UDP output: 10.068000ms, string: 356:ABCDEFG
UDP output: 10.004000ms, string: 357:ABCDEFG
UDP output: 10.120000ms, string: 358:ABCDEFG

在船上:

UDP intput: 20.000000ms, string: 353:ABCDEFG, 
UDP intput: 20.002000ms, string: 354:ABCDEFG,
UDP intput: 19.998000ms, string: 355:ABCDEFG,
UDP intput: 20.051000ms, string: 356:ABCDEFG,
UDP intput: 19.953000ms, string: 357:ABCDEFG,
UDP intput: 19.996000ms, string: 358:ABCDEFG,

我认为这个区间应该由linux系统中的某个东西来定义。我该如何解决?

顺便说一下,开发板的 iptables 显示 (EXT = eth0):

 iptables -A INPUT -i $EXT -p udp -d 0/0 --dport 1024:65535 -j ACCEPT

非常感谢。

最佳答案

感谢您的友好回复。我发现问题是由于 usleep(10) 和 while 结束造成的。在开发板上,usleep(10) 正好需要 20 毫秒,而在另一台 PC 上则需要 0.1 毫秒。

关于c - Linux:UDP 接收消息比发送消息慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28209767/

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