使用 Indy 套接字的 UDP 广播:如何 select 正确的接口?
UDP Broadcasting with Indy Sockets: how to select the right Interface?
使用 C++Builder2006
我正在修改一个做这些事情的旧的小程序:
- 发送UDP广播消息(使用255.255.255.255地址)
- 从所有连接的设备(配备 RabbitCore RCM3200 的硬件设备)获取答案
- 可选择广播另一条 UDP 消息,其中包含其中一个的 MAC 地址以及该设备必须为自己设置的正确网络配置。
(这是因为设备在安装时可能有错误 IP/Netmask,并且需要一种独立于 IP 的方法来设置它。
这是设备生产商的一个完善的方法,所以它不能改变,我只是描述我在做什么)。
我面临的问题描述得很好here:简而言之,Win7 不会通过所有接口发送 UDP 消息,而只能通过 "preferred" 接口发送。
由于该程序是使用 Indy UDPClient 套接字 (TIdUDPClient) 构建的,所以我想保持原样。
问题:
- 有办法"force" UDP 套接字通过特定的网络接口发送吗?这样我就可以 "manually" 循环并将广播发送到所有(相关)网络
- 如果不是....我应该怎么做才能获得相同的结果?
There's a way to "force" the UDP socket to send thru a specific Network interface?
TIdUDPClient
有一个 BoundIP
属性 正是为了这个目的。每次要更改 BoundIP
时都必须调用 TIdUDPClient.Binding.CloseSocket()
,除非您为每个适配器绑定不同的 TIdUDPClient
对象。
This way i could "manually" loop and send the broadcast to all the (relevant) networks
根据您使用的 Indy 版本,您可以使用 TIdStack.LocalAddresses
属性 或 TIdStack.AddLocalAddressesToList()
或 TIdStack.GetLocalAddressList()
方法来获取列表然后可以循环访问的可用本地 IP 地址。
使用 C++Builder2006
我正在修改一个做这些事情的旧的小程序:
- 发送UDP广播消息(使用255.255.255.255地址)
- 从所有连接的设备(配备 RabbitCore RCM3200 的硬件设备)获取答案
- 可选择广播另一条 UDP 消息,其中包含其中一个的 MAC 地址以及该设备必须为自己设置的正确网络配置。
(这是因为设备在安装时可能有错误 IP/Netmask,并且需要一种独立于 IP 的方法来设置它。 这是设备生产商的一个完善的方法,所以它不能改变,我只是描述我在做什么)。
我面临的问题描述得很好here:简而言之,Win7 不会通过所有接口发送 UDP 消息,而只能通过 "preferred" 接口发送。 由于该程序是使用 Indy UDPClient 套接字 (TIdUDPClient) 构建的,所以我想保持原样。
问题:
- 有办法"force" UDP 套接字通过特定的网络接口发送吗?这样我就可以 "manually" 循环并将广播发送到所有(相关)网络
- 如果不是....我应该怎么做才能获得相同的结果?
There's a way to "force" the UDP socket to send thru a specific Network interface?
TIdUDPClient
有一个 BoundIP
属性 正是为了这个目的。每次要更改 BoundIP
时都必须调用 TIdUDPClient.Binding.CloseSocket()
,除非您为每个适配器绑定不同的 TIdUDPClient
对象。
This way i could "manually" loop and send the broadcast to all the (relevant) networks
根据您使用的 Indy 版本,您可以使用 TIdStack.LocalAddresses
属性 或 TIdStack.AddLocalAddressesToList()
或 TIdStack.GetLocalAddressList()
方法来获取列表然后可以循环访问的可用本地 IP 地址。