【发布时间】:2014-07-12 02:32:50
【问题描述】:
我正在尝试使用 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();
}
}
【问题讨论】:
-
请阅读以下帮助链接,了解如何以人们可以提供帮助的方式提问——stackoverflow.com/help/mcve 和 stackoverflow.com/help/on-topic
-
因为你提到了数据包而不是数据流,
ip::udp::socket不符合AsyncReadStream类型要求,所以你不能使用async_read_until。
标签: c++ boost boost-asio packet