簡體   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