13

例如,假设我有一个“智能”温度计,它每 N 秒将当前温度作为 UDP 数据报进行广播。

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

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

这是:-

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

如果是A或B,有什么办法可以绕过它。

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

4

1 回答 1

12

在 Windows 上,您可以使用

SocketOptionName.ReuseAddress

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

回答 Roddy,是的,SO_REUSEADDR 在 *nix 上也以这种方式工作。

如需深入解答,请参阅https://stackoverflow.com/a/14388707/705086

于 2012-11-09T12:35:20.770 回答