我在理解Boost.Asio(使用v1.49.0)boost::asio::ip::udp::socket
套接字背後的概念時存在問題。綁定並連接的Boost.Asio數據報(UDP)套接口
首先我會向我解釋想達到的目標:
- 我躲在一個非常簡單的接口(純抽象基類),所以我有兩個包裝類Boost.Asio的插座它允許訪問流套接字或數據報套接字。
- 我想Boost.Asio的插座傳遞給我的包裝類的構造函數之前同時配置本地端點和遠程端點。
- 我想使用
socket.receive
(或者boost::asio::read
)和socket.send
(或者boost::asio::write
)成員函數代替socket.receive_from
和socket.send_to
成員函數。 - 使用
socket.send
和socket.receive
與boost::asio::ip::udp::socket
的唯一方式似乎是連接套接字。
UDP套接字都可以結合並連接:
- 綁定經由
socket.bind
成員函數來實現的。 - 連接是通過
socket.connect
成員函數實現的。
的問題是,即使我能
- 打開插座,
- 設置套接字選項,
- 綁定插座,
- 連接插座,
並且能夠通過套接字發送數據,我無法從套接字接收數據。如果我沒有連接套接字,我可以通過綁定的本地端點接收數據,但我無法使用接近的描述發送數據。
- 所以我的核心問題是:我在嘗試一些不可能實現的事情嗎?
- 我只能使用
bind
或connect
帶一個套接字實例嗎? - 如果前兩個問題的答案是否定的:我必須做什麼才能通過綁定和連接的Boost.Asio UDP套接字接收和發送數據。
我知道UDP實際上是無連接的,因此文本使用了Boost.Asio術語。我也讀connect on "connection less" boost::asio::ip::udp::socket這似乎表明,我不可能嘗試。