3
我知道这可能是一个普遍愚蠢的问题,但有没有一种方法可以实现tcp中的多级异步数据读取,其中:a)我们读取前四个字节 - 其中字节3 & 4对应到剩余数据包的大小 b)我们从步骤a中读取基于其有限大小的剩余数据包(数据)。boost asio:异步数据读取
我在考虑使用async_read的实现。像这样的事情:
char hd_buf[3];
boost::asio::async_read(
conn->getNetSocket(),
boost::asio::buffer(hd_buf, 3),
boost::bind(&TCPServer::handleHeaderRead, this, boost::asio::placeholders::error));
auto dt_sz = &hd_buf[2] + &hd_buf[3]; //nvm this part, it exists in handleHeaderRead
char* dt_buf = new dt_buf[dt_sz];
boost::asio::async_read(
conn->getNetSocket(),
boost::asio::buffer(dt_buf, dt_sz),
boost::bind(&TCPServer::handleDataRead, this, boost::asio::placeholders::error));
我一般正确与这样的执行道路?
对'async_read'的第二次调用必须来自第一个调用的完成处理程序(即'handleHeaderRead');除此之外,应该没有问题。 –
@MikeSeymour除了当然,如果你选择'boost :: asio :: spawn'的协程的便利性 – sehe
@MikeSeymour谢谢:) – Edgar