gpt4 book ai didi

c++ - boost asio : async data reading

转载 作者:太空狗 更新时间:2023-10-29 23:16:56 27 4
gpt4 key购买 nike

我知道这可能是一个通常很愚蠢的问题,但是有没有办法在 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));

我对这样的实现路径大体上正确吗?

最佳答案

是的,大多数网络协议(protocol)都将要传输的数据的动态大小存储在数据之前的固定大小字段中,例如:

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

一般header都是固定长度的,数据长度在header内。

关于c++ - boost asio : async data reading,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21380659/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com