[英]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.