繁体   English   中英

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

[英]How to find the destination address of a UDP packet using boost::asio?

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

到目前为止,它工作正常,但似乎没有任何方法在boost :: asio中查找收到的UDP数据包的目标地址(使用socket.async_receive_from) - 无论是发送到多播组还是实际接口。 我可以使用消息的内容来推断它是发送多播还是单播,但是能够检查目标地址会很好。

我们目前正在使用Windows 7,但将来会转向Linux。

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

不幸的是,这对于boost :: asio来说是不可能的,并且当你尝试在应用层访问传输层信息时,通常不是“做”的方法。

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

a)在Linux上使用例如IP_PKTINFO或SO_BINDTODEVICE编写非便携式系统代码。 示例代码可以在boost asio邮件列表中找到

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

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

关于SO的这个问题也可能有用: 在Windows中为套接字使用特定的网络接口

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM