我有一个UDP通信系统,可以在一个端口上广播数据消息。在第二个系统上,我使用TIdUDPServer组件捕获这些消息,但此应用程序仅处理消息的子集。
当我开始编写第二个应用程序来处理UDP数据广播中的其他消息时,它工作得很好。但是,如果我尝试同时运行这两个应用程序,第二个应用程序会引发异常“套接字错误#10048地址已在使用中。”
是否可以覆盖/扩展Indy以允许两个组件共享相同的UDP端口进行监听?
答案 0 :(得分:2)
两个应用程序在打开各自的套接字时必须指定SO_REUSEADDR
标志。 Indy组件具有ReuseSocket
属性用于此目的。但是,当多个应用程序共享同一个端口时,无法控制或保证哪个应用程序将接收哪个消息。他们不会同时收到相同邮件的副本。如果您需要这样做,那么您需要第三个应用程序,它专门接收所有真实消息,然后根据需要将它们转发到相应的应用程序。否则,请考虑让应用程序以混杂模式侦听NIC以接收原始网络数据而不考虑套接字(尽管如此,您不能使用Indy)。