小编Xia*_*Xia的帖子

如何每1 ms发送一次UDP数据包?

我需要编写一个定期发送UDP数据包的Linux应用程序.理想情况下,频率应为每1 ms,数据包之间的间隔应保持一致.

我试过这样通过普通的套接字来做到这一点:

while(counter < 4294967295)
{
    for (k=0; k<4; k++) //Convert counter value to string
    {
        buf[k]=((unsigned char*)(&counter))[k];
    }
    sn = sendto(sender, &buf, sizeof(buf), 0, (struct sockaddr *)&srv_addr, sizeof(srv_addr)); // Sending UDP segment
    if (sn < 0 ) error("UDP send fail!"); //Error handle
    counter++;

    nanosleep(&delay, NULL); //Sleep
}
Run Code Online (Sandbox Code Playgroud)

在上面的应用程序中,我只用一个计数器值填充UDP数据包,所以我可以在接收器的末端区分它们.

基本上这个代码确实起到了作用,但是存在以下问题:1.频率不够高,受主机性能和其他应用的影响很大.2.数据包间隔不一致,因为有RTC用作参考.但是,如果我尝试进行RTC检查,那使得数据包速率更慢.

我认为应该以更优雅的方式用不同的方法实现我的目标.请提出建议.

c sockets linux udp

6
推荐指数
1
解决办法
4677
查看次数

标签 统计

c ×1

linux ×1

sockets ×1

udp ×1