我一直在努力实现这一目标,我真诚地赞美任何帮助。我的两个应用程序,客户端和服务器都开始抛出“向量下标超出范围”的异常。
如何正确 ?
仍然试图解决这个问题,有人吗?
据我所知,我应该创建一个
boost::asio::basic_stream_socket stream;
然后致电:
stream.send(boost::asio::buffer(data));
?
我认为完全可以异步进行吗?
有什么区别:
basic_stream_socket::send()
与basic_stream_socket::write_some()
对比basic_stream_socket::async_write_some()
?
basic_stream_socket::receive()
与baic_stream_socket::read_some()
对比basic_stream_socket::async_read_some()
?
我假设send()
&当我希望确保100%的数据被发送/接收时,我可以调用receive()
方法 - 以阻塞套接字为代价?
我假设write_some()
&当我不确定是否发送/接收100%的数据时,我可以调用read_some()
方法,同时仍然阻止套接字?
我假设async_read_some()
& async_write_some()
是不阻塞套接字的方法,它们可以读/写任何内容吗?
答案 0 :(得分:5)
答案 1 :(得分:0)
我也很擅长提升asio,但这是我的答案:
函数名以async_开头的函数除了其他之外还包含一个回调函数作为参数,该函数将在操作完成时调用。也就是说,函数async_write_some()不会阻塞但会立即返回,并且当操作完成时,将调用回调函数。
据我所知,你的假设是正确的。但是,使用函数async_write_some等,您有一个回调函数,它将传输的字节数作为参数。
例如,这里我有一个从套接字读取的函数:
boost::asio::async_read(
*socket_,
boost::asio::buffer(read_msg_.body(), read_msg_.body_length()),
boost::bind(
&sender::handle_read_content,
this,
boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred
)
);
其中的回调函数是handle_read_content,它看起来像这样:
void sender::handle_read_content(
const boost::system::error_code& err,
std::size_t bytes_transferred
)
一开始我读这本教程非常好: Boost Asio