Я знаю, что это может быть вообще глупый вопрос, но есть ли способ реализовать многостадийное чтение данных aсинхронизации в tcp где: a) мы читаем первые четыре байта - где байты 3 & 4 соответствуют к размеру оставшегося пакета b) мы читаем оставшийся пакет (данные) на основе его конечного размера с шага a.boost asio: чтение данных async
Я думаю об использовании с использованием 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