我在理解Boost.Asio(使用v1.49.0)boost::asio::ip::udp::socket
套接字背后的概念时遇到了问题。
首先,我要解释一下我想要实现的目标:
socket.receive
(或boost::asio::read
)和socket.send
(或boost::asio::write
)成员函数,而不是socket.receive_from
和{{1}成员函数。socket.send_to
和socket.send
与boost::asio::ip::udp::socket
一起使用的唯一方法似乎是连接套接字。UDP套接字既可以绑定也可以连接:
socket.bind
成员函数实现绑定。socket.connect
成员函数实现连接。问题是,即使我能够
并且为了能够通过套接字发送数据,我无法从套接字接收数据。如果我没有连接套接字,我可以通过绑定的本地端点接收数据,但是我无法使用所描述的接近方式发送数据。
socket.receive
或 bind
与一个套接字实例一起使用?我知道UDP实际上是无连接的,因此文本使用Boost.Asio术语。我也读过connect on "connection less" boost::asio::ip::udp::socket,这似乎表明我不可能尝试。
答案 0 :(得分:3)
您在connect
的手册页中缺少一点:
如果套接字sockfd的类型为SOCK_DGRAM,则 addr 默认情况下将数据报发送到的地址,以及仅接收数据报的地址。< / p>
这意味着,如果您想要connect
套接字,那么它将只能从远程端点(连接的端点)接收数据报,即在将数据报发送到您的数据报之前,对等体必须绑定自己的套接字套接字等待数据。
如果您需要从多个对等方接收数据,可以将udp socket连接到&#34;任何&#34;地址(即0.0.0.0 - udp :: v4())和一些端口。