C++ 绑定并连接的Boost.Asio数据报(UDP)套接字
我在理解Boost.Asio(使用v1.49.0)套接字背后的概念时遇到问题 首先,我要解释我想要实现的目标:C++ 绑定并连接的Boost.Asio数据报(UDP)套接字,c++,sockets,boost,udp,boost-asio,C++,Sockets,Boost,Udp,Boost Asio,我在理解Boost.Asio(使用v1.49.0)套接字背后的概念时遇到问题 首先,我要解释我想要实现的目标: 我将Boost.Asio套接字隐藏在一个非常简单的接口(纯抽象基类)后面,因此我有两个包装器类,允许访问流套接字或数据报套接字 在将Boost.Asio套接字传递给我的包装类的构造函数之前,我想同时配置本地端点和远程端点 我想使用socket.receive(或者boost::asio::read)和socket.send(或者boost::asio::write)成员函数而不是so
- 我将Boost.Asio套接字隐藏在一个非常简单的接口(纯抽象基类)后面,因此我有两个包装器类,允许访问流套接字或数据报套接字
- 在将Boost.Asio套接字传递给我的包装类的构造函数之前,我想同时配置本地端点和远程端点
- 我想使用
(或者socket.receive
)和boost::asio::read
(或者socket.send
)成员函数而不是boost::asio::write
和socket.receive_from
成员函数socket.send_to
- 使用
和socket.send
的唯一方法似乎是连接套接字socket.receive
- 绑定是通过成员函数实现的
- 通过成员功能实现连接
bind
或connect
我知道UDP实际上是无连接的,因此本文使用Boost.Asio术语。我也读过,这似乎表明我所尝试的是不可能的。您在
connect
的手册页中遗漏了一点:
如果socket sockfd为SOCK_DGRAM类型,则默认情况下,addr是数据报发送到的地址,并且是从中接收数据报的唯一地址
这意味着,如果您想连接套接字,那么它将只能从远程端点(连接的端点)接收数据报,也就是说,在将数据报发送到您的套接字等待数据之前,对等方必须绑定自己的套接字
如果需要从多个对等方接收数据,可以将udp套接字连接到“任意”地址(即0.0.0.0-udp::v4())和某些端口