gpt4 book ai didi

c++ - 通过 UDP 丢帧

转载 作者:行者123 更新时间:2023-11-28 06:42:44 27 4
gpt4 key购买 nike

这是我的第一个“问题”,我希望我做对了:)

我正在尝试网络编程,特别是我想通过无线网络使用 UDP 从一台机器向其他 >10 台设备广播数据。数据以大约 300 字节的数据包的形式出现,每秒大约 30 帧,即每 ~33 毫秒一个。我的实现基于 qt 示例:http://qt-project.org/doc/qt-4.8/network-broadcastreceiver.html

我正在仅使用一个客户端测试该应用程序并遇到不少丢帧,我不太确定为什么。如果我使用以太网电缆,一切正常。我希望这里有人能帮我找到原因。

我可以发现丢失的帧,因为数据包包含一个时间戳:在我收到一个数据报后,我可以检查它的时间戳和最后一个收到的时间戳之间的差异,如果它大于例如50ms,表示我在途中丢失了一个数据包。这种情况经常发生,即使我有一个专用的 wi-fi 网络(没有连接到互联网并且只有 3 台机器连接到我刚买的路由器)。大多数时候我会丢弃一两个数据包,这不是问题,但有时时间戳之间的差异表明丢失了超过 30 个数据包,这对我想要实现的目标不利。

当我从一台机器 ping 到另一台机器时,我得到这些值:

50 packets transmitted, 50 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 1.244/91.405/508.959/119.074 ms

在只有 3 个客户端的专用网络中,对于新路由器来说相当糟糕,不是吗?该路由器被宣传为非常快速的 Wi-Fi 路由器,性能比 802.11n 路由器快三倍。

将它与我在同一个房间里连接了大约 10 台机器的旧路由器在办公时间内获得的值进行比较:

39 packets transmitted, 39 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 1.458/47.297/142.201/37.186 ms

也许是路由器有问题?

我无法解释的一件事是,如果我在运行 UDP 客户端/服务器应用程序时执行 ping 操作,统计数据会提高:

55 packets transmitted, 55 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 1.164/6.174/197.962/26.181 ms

我想知道是否有人有关于测试内容的提示,关于如何通过 wi-fi 在这些机器之间实现“可靠”UDP 连接的提示。可靠的意思是我可以丢弃 2 个连续的数据包,但不能更多。

谢谢。

编辑

路由器(?)似乎以突发方式发送数据包。我正在测量它在客户端接收两个数据报之间耗时,这个值对于大约 10 个数据包的序列大约是 3 毫秒,然后,对于下一个数据包大约是 300 毫秒。我认为我在客户端的问题更多地与帧之间的间隔不一致有关,而不是丢帧。我可能只需要有一个队列和 >300 毫秒的延迟到服务器。

最佳答案

解决与网络相关的任何问题的第一个也是最简单的方法是在 wireshark 上捕获它们。还要检查数据包是否真的从广播机发出。

此外,根据您的描述,如果数据包可以通过以太网电缆正常传输,而不是 UDP,那么UDP 端口也可能有问题。

关于c++ - 通过 UDP 丢帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25645232/

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