gpt4 book ai didi

c++ - 如何使用 boost::asio 查找 UDP 数据包的目标地址?

转载 作者:行者123 更新时间:2023-11-28 03:23:26 25 4
gpt4 key购买 nike

我正在开发一个点对点通信网络,以便在工业环境中通过 LAN 使用。有些消息只是异步的,不需要响应。其他是请求-响应。请求消息(和异步消息)被发送到多播组,请求的回复被单播发送。因此,每个端点都会收到发送到多播组的 UDP 数据包,还会收到刚刚使用普通单播发送给它的消息。

到目前为止它工作正常,但在 boost::asio 中似乎没有任何方法可以找出接收到的 UDP 数据包的目标地址(使用 socket.async_receive_from)——它是否被发送到多播组或实际界面。我可以使用消息的内容来推断它是通过多播还是单播发送的,但如果能够同时检查目标地址就更好了。

我们目前使用的是 Windows 7,但将来会过渡到 Linux。

有没有办法找到使用 boost::asio 接收的 UDP 数据包的目标地址?

最佳答案

不幸的是,这对于 boost::asio 是不可能的,而且通常不是“做的方式”,因为您尝试访问 Transport Layer。信息在Application Layer .

所以你基本上有两个选择:

a) 在 Linux 上使用例如 IP_PKTINFO 或 SO_BINDTODEVICE 编写不可移植的系统代码。可以在 boost asio 邮件列表中找到示例代码 here

b) 使用两个不同的套接字,一个用于多播,一个用于单播。因此,您需要在每个套接字上指定一个不同于“0.0.0.0”的 listen_address。

udp::endpoint(address_v4::from_string("239.192.152.143"), 6771)

关于 SO 的这个问题也可能有帮助:Using a specific network interface for a socket in windows

关于c++ - 如何使用 boost::asio 查找 UDP 数据包的目标地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14803119/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com