同一台计算机上的多个应用程序可以接收 UDP 广播吗?

Posted

技术标签:

【中文标题】同一台计算机上的多个应用程序可以接收 UDP 广播吗?【英文标题】:Can UDP broadcasts be received by multiple apps on the same computer? 【发布时间】:2012-10-29 18:18:38 【问题描述】:

例如,假设我有一个“智能”温度计,它每 N 秒以 UDP 数据报的形式广播当前温度。

现在,我可以编写一个客户端来侦听这些消息并以图形方式显示它们,并且我可以让该客户端同时在多台计算机上运行。目前没问题。

但是,当我尝试在同一台 Windows 计算机上运行客户端的两个实例时,我收到有关尝试“绑定到已使用的端口”的错误。

这是:-

答:与所有操作系统上的 UDP 广播一样吗? B:Windows 网络堆栈的限制? C:或者,可能是我读取数据报的方式中的一个错误?

如果是A或B,有什么办法可以解决。

如果是 C,那么我会发布一些代码..

【问题讨论】:

您可以使用原始套接字,这通常可以让您多次看到同一个数据包。但是您需要自己进行更多解码(取决于平台 UDP 或 IP+UDP 甚至以太网+IP+UDP)。 @KillianDS - 谢谢。希望这应该是直截了当的,因为我将只使用原始套接字来取消广播...... Is there a way for multiple processes to share a listening socket?的可能重复 【参考方案1】:

在 Windows 上,您可以使用以下方法将多个进程绑定到同一个套接字

SocketOptionName.ReuseAddress

选项(请参阅此答案Is there a way for multiple processes to share a listening socket?)。广播数据包应强制 Windows 将该数据包的副本提供给该端点上的每个侦听器。

回答 Roddy,是的,SO_REUSEADDR 在 *nix 上也是如此。

深入解答请参考https://***.com/a/14388707/705086。

【讨论】:

令我惊讶的是,这似乎 - 主要 - 工作。我认为当旧绑定卡在定时等待状态时,主要需要 SO_REUSEADDR 来重新启动 TCP 服务器。 如果我有多个监听器,是否保证端点上的每个监听器都会得到一个数据包的副本? UDP 不是保证协议 @PaulK 我认为前面的答案将 TCP/IP 规范中使用的“可靠”与您所要求的混淆了。同一台计算机上的每个侦听器应用程序都应该获得接收到的 UDP 数据包的相同副本,无论它是否有错误。

以上是关于同一台计算机上的多个应用程序可以接收 UDP 广播吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用UDP进行跨网段广播

发送/接收通知

连接到广播IP地址

在同一台计算机上运行多个 TeamCity 代理?

Qt UDpsocket 在同一台计算机上工作,但不在同一网络上的两台计算机上工作

在同一台计算机上进行数据传输 出现tcp错误56