niX*_*man 13 buffer boost boost-asio
当我尝试使用带有boost :: asio :: buffer的std :: string时,我收到以下错误消息:
boost/asio/detail/consume_buffers.hpp:在构造函数'boost :: asio :: detail :: consume_buffers <boost :: asio :: mutable_buffer,boost :: asio :: const_buffers_1
:: consume_buffers(const boost :: asio :: const_buffers_1&)':boost/asio/impl/read.hpp:140:25:
从'boost :: asio :: detail :: read_op <boost :: asio ::实例化basic_stream_socket,boost :: asio :: const_buffers_1,boost :: asio :: detail :: transfer_all_t,boost :: _ bi :: bind_t <void,boost :: _ mfi :: mf1,boost :: _ bi :: list2,boost :: arg <1>(*)()>:: read_op(boost :: asio :: basic_stream_socket&,const boost :: asio :: const_buffers_1&,boost :: asio :: detail :: transfer_all_t,boost :: _ bi :: bind_t <void,boost :: _ mfi :: mf1,boost :: _ bi :: list2,boost :: arg <1>(*)()>
Run Code Online (Sandbox Code Playgroud))' .... .......
完整源代码:http://liveworkspace.org/code/eca749f6f2714b7c3c4df9f26a404d86
rtu*_*ado 11
我认为问题是你传递一个const缓冲区async_read而不是一个可变缓冲区.在以第50行结尾的块中,boost::asio::buffer(_header)返回一个const缓冲区.你应该做的事情boost::asio::async_read(s, boost::asio::buffer(data, size), handler),因为boost::asio::buffer(data, size)创建一个可变的缓冲区.
而不是将std::strings用于_header和_data,您可能需要使用char数组,例如:
char*_data;
boost :: asio :: buffer(_data,strlen(_data));
请参阅buffer和async_read的参考.
似乎std::string只能asio::buffer作为常量引用传递给 an 。
std::vector<char> 应该是更好的选择:
std::vector<char> d2(128);
bytes_transferred = sock.receive(boost::asio::buffer(d2));
Run Code Online (Sandbox Code Playgroud)
您必须传递一个指针作为第一个参数:
#include <string>
#include <boost/asio.hpp>
std::string request, reply;
auto rsize = boost::asio::buffer(&reply[0], request.size());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21953 次 |
| 最近记录: |