如何使用Boost :: Asio?</char>发送std :: vector <char>

时间:2009-06-09 13:37:40

标签: c++ boost-asio

我一直在努力实现这一目标,我真诚地赞美任何帮助。我的两个应用程序,客户端和服务器都开始抛出“向量下标超出范围”的异常。

如何正确


仍然试图解决这个问题,有人吗?

据我所知,我应该创建一个

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()&amp;当我希望确保100%的数据被发送/接收时,我可以调用receive()方法 - 以阻塞套接字为代价?

我假设write_some()&amp;当我不确定是否发送/接收100%的数据时,我可以调用read_some()方法,同时仍然阻止套接字?

我假设async_read_some()&amp; async_write_some()是不阻塞套接字的方法,它们可以读/写任何内容吗?

2 个答案:

答案 0 :(得分:5)

假设您创建了,并且正在尝试发送vector<char> 数据

stream.send(boost::asio::buffer(data));

请参阅boost:asio::buffer

答案 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