我正在学习Boost :: asio和所有异步的东西.如何异步读取user_std :: string类型的变量?Boost::asio::buffer(user_)仅适用于async_write(),但不适用async_read().它适用于矢量,那么它不使用字符串的原因是什么?除了声明char user_[max_len]和使用之外,还有其他方法Boost::asio::buffer(user_, max_len)吗?
另外,继承boost::enable_shared_from_this<Connection>和使用shared_from_this()而不是thisin async_read()和async_write()?的重点是什么?我在例子中看到了很多.
这是我的代码的一部分:
class Connection
{
public:
Connection(tcp::acceptor &acceptor) :
acceptor_(acceptor),
socket_(acceptor.get_io_service(), tcp::v4())
{ }
void start()
{
acceptor_.get_io_service().post(
boost::bind(&Connection::start_accept, this));
}
private:
void start_accept()
{
acceptor_.async_accept(socket_,
boost::bind(&Connection::handle_accept, this,
placeholders::error));
}
void handle_accept(const boost::system::error_code& err)
{
if (err)
{
disconnect();
}
else
{
async_read(socket_, boost::asio::buffer(user_),
boost::bind(&Connection::handle_user_read, this,
placeholders::error, placeholders::bytes_transferred));
}
}
void …Run Code Online (Sandbox Code Playgroud) 我正在使用boost :: asio编写客户端服务器应用程序.我想将结构从客户端传输到服务器.结构中有一些std :: wstrings.如何在boost :: asio :: buffer中编码结构?