【发布时间】:2015-06-21 08:41:43
【问题描述】:
我想向网络上的多个设备发送 UDP 广播数据报,包括发送方设备本身。目标是让所有设备同时接收数据(嗯,+/- 5ms 是可以的)。
问题在于发送设备上的网络接口正在循环返回数据,因此它会立即被接收(与网络延迟发挥作用的其他设备相比——例如,对于 Wifi 来说相当多)
知道如何禁用我的网络接口以直接循环返回数据吗?
我的另一个想法:是否可以创建一个虚拟网络接口来发送广播数据包并在另一个仅通过网络接收它的接口上侦听?
我试图在 Linux 机器上用 C 语言来做这件事。任何帮助将不胜感激!
【问题讨论】:
-
我认为您误解了网络的工作方式。您不能向自己发送消息,让它在电缆/空中等待 X 毫秒,然后再回来。您是否想要一些目标框/路由器将消息回显给您?你想要某种延迟的环回接口吗?
-
广播/多播数据包实际上并未发送。它们总是在接口的输入队列中排回队列,因此您总是可以在远程站点之前获取它们。顺便说一句,您不能在完全相同的地方接收数据包,因为它们在不同的地方,并且您必须考虑传输延迟、桥接、路由和其他一些可能延迟交付的因素。为什么你认为 5ms 可以,而不是 0.5s?网络带宽从 bps 到 Gbps(现在甚至是 Tbps)不等。
-
更好地解释你的真正问题是什么,而不是你脑子里有什么计划解决方案。
-
我想在多台设备上开始完美同步的音频播放。我当前的解决方案确保所有接收器都有足够的缓冲数据,并且我“只”需要一个开始命令来同时在任何地方接收。超过 10 毫秒会导致回声。 NTP 对我不起作用,因为目标设备上的时钟不够精确(硬件便宜)。
标签: c linux networking udp broadcast