![](/img/trans.png)
[英]How to send an std::vector<unsigned char> using asio::UDP socket.send_to
[英]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()
是不阻塞套接字的方法,他们可以读/写任何东西?
我也很擅长提升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.