[英]Boost.Asio datagram (UDP) socket that is both bound and connected
我在理解Boost.Asio(使用v1.49.0) boost::asio::ip::udp::socket
套接字背后的概念時遇到了問題。
首先,我要解釋一下我想要實現的目標:
socket.receive
(或者boost::asio::read
)和socket.send
(或者boost::asio::write
)成員函數,而不是socket.receive_from
和socket.send_to
成員函數。 boost::asio::ip::udp::socket
使用socket.send
和socket.receive
的唯一方法似乎是連接套接字。 UDP套接字可以綁定和連接:
socket.bind
成員函數實現的。 socket.connect
成員函數實現連接。 問題是,即使我能夠
並且為了能夠通過套接字發送數據,我無法從套接字接收數據。 如果不連接套接字,則可以通過綁定的本地端點接收數據,但是無法使用上述方法發送數據。
bind
或與一個套接字實例connect
嗎? 我知道UDP實際上是無連接的,因此文本使用Boost.Asio術語。 我還閱讀了“少連接” boost :: asio :: ip :: udp :: socket上的connect,這似乎表明我嘗試的是不可能的。
您在connect
手冊頁中遺漏了一點:
如果套接字sockfd的類型為SOCK_DGRAM,則addr是默認情況下向其發送數據報的地址,並且是唯一從其接收數據報的地址 。
這意味着,如果您想connect
套接字,那么它將只能從遠程端點(已連接的端點)接收數據報,即對等方將必須綁定自己的套接字,然后才能將數據報發送到套接字以等待數據。
如果需要從多個對等方接收數據,則可以將udp套接字連接到“任意”地址(即0.0.0.0-udp :: v4())和某個端口。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.