Indy TIdUDPSever 可以有多个实例链接到同一个 UDP 端口进行监听吗

Tim*_*ski 1 delphi indy

我有一个 UDP 通信系统,可以在单个端口上广播数据消息。在第二个系统上,我使用 TIdUDPServer 组件捕获这些消息,但该应用程序仅处理消息的子集。

当我开始编写第二个应用程序来处理 UDP 数据广播中的其他消息时,它工作得很好。但是,如果我尝试同时运行两个应用程序,第二个应用程序会引发异常“套接字错误 #10048 地址已在使用中”。

是否可以覆盖/扩展 Indy 以允许两个组件共享相同的 UDP 端口进行监听?

Rem*_*eau 5

SO_REUSEADDR两个应用程序在打开各自的套接字时都必须指定该标志。Indy 组件具有ReuseSocket用于此目的的属性。但是,当多个应用程序共享同一端口时,无法控制或保证哪个应用程序将接收哪个消息。他们不会同时收到相同消息的自己的副本。如果您需要这样做,那么您需要第三个应用程序来专门接收所有真实消息,然后根据需要将它们转发到适当的应用程序。否则,请考虑让应用程序以混杂模式侦听 NIC 以接收原始网络数据,而不考虑套接字(但您不能使用 Indy)。