繁体   English   中英

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

[英]How do I send a std::vector<char> using 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()receive()是当我希望确保100%的数据被发送/接收时我可以调用的方法 - 以阻塞套接字为代价?

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

我假设async_read_some()async_write_some()是不阻塞套接字的方法,他们可以读/写任何东西?

假设您创建了一个并尝试发送vector<char> 数据

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

请参阅boost:asio :: buffer

我也很擅长提升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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM