2

使用 C++Builder2006

我正在修改一个旧的小程序来做这些事情:

  1. 发送 UDP 广播消息(使用 255.255.255.255 地址)
  2. 从所有连接的设备中获取答案(配备 RabbitCore RCM3200 的硬件)
  3. 可选择广播另一条 UDP 消息,其中包含其中一个的 MAC 地址以及该设备必须为自己设置的正确网络配置。

(这是因为设备在安装时可能有错误的 IP/网络掩码,并且需要一种独立于 IP 的方法来设置它。这是设备制造商提供的一种完善的方法,因此无法更改,我只是描述我在做什么)。

我面临的问题在这里得到了很好的描述:简而言之,Win7不会通过所有接口发送UDP消息,而只能通过“首选”接口发送。由于该程序是使用 Indy UDPClient 套接字 (TIdUDPClient) 构建的,因此我想保持原样。

问题:

  1. 有一种方法可以“强制”UDP 套接字通过特定的网络接口发送吗?这样我可以“手动”循环并将广播发送到所有(相关)网络
  2. 如果不是......我应该怎么做才能获得相同的结果?
4

1 回答 1

4

有一种方法可以“强制”UDP 套接字通过特定的网络接口发送吗?

TIdUDPClient具有BoundIP用于该确切目的的财产。TIdUDPClient.Binding.CloseSocket()每次要更改 时都必须调用,除非为每个适配器BoundIP绑定不同的对象。TIdUDPClient

这样我可以“手动”循环并将广播发送到所有(相关)网络

根据您使用的 Indy 版本,您可以使用该TIdStack.LocalAddresses属性或TIdStack.AddLocalAddressesToList()orTIdStack.GetLocalAddressList()方法来获取可用的本地 IP 地址列表,然后您可以循环访问这些地址。

于 2016-05-05T17:23:53.277 回答