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