首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用boost::asio查找UDP数据包的目的地址?

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

Stack Overflow用户
提问于 2013-02-11 06:03:38
回答 1查看 1.3K关注 0票数 0

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

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

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-11 14:31:10

不幸的是,这在boost::asio中是不可能的,并且通常不是“可以这样做的方式”,因为您试图在Application Layer上访问Transport Layer信息。

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

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

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

代码语言:javascript
复制
udp::endpoint(address_v4::from_string("239.192.152.143"), 6771)

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14803119

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档