sockets - 使用 Indy 套接字进行 UDP 广播 : how to select the right Interface?

标签 sockets networking udp indy c++builder-2006

使用 C++Builder2006

我正在修改一个旧的小程序,它可以执行以下操作:

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

(这是因为设备在安装时可能有错误的 IP/网络掩码,并且需要一种与 IP 无关的方法来设置它。 这是设备生产商制定的完善方法,因此无法更改,我只是描述我正在做的事情)。

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

问题:

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

最佳答案

There's a way to "force" the UDP socket to send thru a specific Network interface?

TIdUDPClient 有一个用于此目的的 BoundIP 属性。每次想要更改 BoundIP 时,您都必须调用 TIdUDPClient.Binding.CloseSocket(),除非您绑定(bind)了不同的 TIdUDPClient 对象每个适配器。

This way i could "manually" loop and send the broadcast to all the (relevant) networks

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

关于sockets - 使用 Indy 套接字进行 UDP 广播 : how to select the right Interface?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37045719/

相关文章:

c++ - 没有数据交换的 TCP 连接超时

C文件传输套接字

java - 通过 usb 访问开发机器 localhost

python - 在Python中获取传入UDP数据包的TTL

javascript - 使用 node.js 重组 udp 消息

java - 有没有什么好的网站教Java中数据报套接字的使用?

PHP套接字服务器问题(mysql连接,最大连接数限制)

c# - 在套接字读取之前替代 Thread.Sleep()

linux - 网卡的DMA ring buffer和TX/RX ring是什么关系?

postgresql - Postgres CIDR。如何只选择没有子网的网络?