Я пытаюсь получить пакет от клиента с помощью boost::asio::async_read_until..
boost::asio::async_read_until(socket, buf, 0x78, boost::bind(&Session::ReadHandler, shared_from_this(), boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred));
Клиент отправляет FE 42 54 89 7B 14 05 78 FE 42 55 89 7B 14 05 78 и с помощью async_read_until я получил FE 42 54 89 7B 14 05 78. Теперь, как я могу получить вторую часть пакета? в некоторых случаях клиент объединяет 2 или более пакетов в один перед отправкой на сервер.
Я надеюсь, что это возможно, заранее спасибо!
Изменить 1 мой код
boost::asio::ip::tcp::socket socket;
boost::asio::streambuf buf;
void Session::Read()
{
boost::asio::async_read_until(socket, buf, 0x78, boost::bind(&Session::ReadHandler, shared_from_this(), boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred));
}
void Session::ReadHandler(const boost::system::error_code &error, std::size_t bytes_transferred)
{
if (!error)
{
boost::asio::streambuf::const_buffers_type data = buf.data();
std::string packet(boost::asio::buffers_begin(data), boost::asio::buffers_end(data));
buf.consume(buf.size());
}
else
{
socket.close();
}
}
ip::udp::socket
не соответствует требованиям типаAsyncReadStream
, поэтому вы не можете использоватьasync_read_until
. - person Sam Miller   schedule 16.07.2014