Sockets 带Indy套接字的UDP广播:如何选择正确的接口?
使用C++Builder2006 我正在修改一个旧的小程序,它可以执行以下操作:Sockets 带Indy套接字的UDP广播:如何选择正确的接口?,sockets,networking,udp,indy,c++builder-2006,Sockets,Networking,Udp,Indy,C++builder 2006,使用C++Builder2006 我正在修改一个旧的小程序,它可以执行以下操作: 发送UDP广播消息(使用255.255.255.255地址) 从所有连接的设备(配备RabbitCore RCM3200的硬件人员)获取答案 (可选)广播另一条UDP消息,其中包含其中一个设备的MAC地址以及该设备必须为自身设置的正确网络配置 (这是因为设备在安装时可能有错误的IP/网络掩码,并且需要一种独立于IP的方法来设置它。 这是设备生产商提供的一种行之有效的方法,因此无法更改,我只是描述我正在做的事情) 我
TIdUDPClient
有一个BoundIP
属性用于该确切目的。每次要更改BoundIP
,都必须调用TIdUDPClient.Binding.CloseSocket()
,除非为每个适配器绑定不同的TIdUDPClient
对象
通过这种方式,我可以“手动”循环并将广播发送到所有(相关)网络
根据您使用的Indy的版本,您可以使用
TIdStack.LocalAddresses
属性,或者TIdStack.AddLocalAddressesToList()
或TIdStack.GetLocalAddressList()
方法来获取可用的本地IP地址列表,然后您可以循环使用。可能我还不清楚,对不起:“由于该程序是使用Indy UDPClient套接字(TIdUDPClient)构建的,因此我希望保持原样。“这意味着我想找到一个仍然使用Indy组件的解决方案,而不是我想让应用程序只使用一个界面发送广播消息。谢谢。但是我找不到使用TidStack的方法。那个类本身是不可实例化的,因为它是抽象的,我不能定义派生窗口。。。我也尝试过(正如我发现的那样)GStack变量,但我不知道它在哪里声明(显然不在IdGlobal.hpp中)@FabioCalzolari全局GIdStack
对象指针在IdStack.hpp
头中声明。Indy 10中的TIdUDPClient
中有一个BoundIP
属性。您正在使用Indy 9吗?是的,Indy 9包含在BCB2006中。TIdUDPClient
不支持绑定到Indy 9中的特定接口。但是您可以通过从TIdUDPClient
派生并重写虚拟GetBinding()
方法来添加它。