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

时间:2011-10-28 01:52:06

标签: delphi indy

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

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

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

1 个答案:

答案 0 :(得分:2)

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