提升asio:异步数据读取

时间:2014-01-27 12:16:27

标签: c++ boost boost-asio

我知道这可能是一个普遍愚蠢的问题,但有没有办法在tcp中实现多级异步数据读取: a)我们读取前四个字节 - 其中字节3和4对应于剩余分组的大小 b)我们根据步骤a中的有限大小读取剩余的数据包(数据)。

我正在考虑使用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));

我总体上对这种实施道路是否正确?

1 个答案:

答案 0 :(得分:0)

是的,大多数网络协议存储数据的动态大小,以便在数据之前的固定大小字段中传输,例如:

[ size ][  data...  ]
 4bytes  `size`bytes

通常,标头具有固定长度,数据长度在标头内。