【发布时间】:2014-08-29 10:32:38
【问题描述】:
我无法理解 Boost.Asio(使用 v1.49.0)boost::asio::ip::udp::socket 套接字背后的概念。
首先我要解释一下我想要实现的目标:
- 我将 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,这似乎表明我正在尝试是不可能的。
【问题讨论】:
标签: c++ sockets boost udp boost-asio