提升 asio async_read_until在匹配条件下停止读取
Boost asio async_read_until stop reading on matched condition
我有一个关于使用boost asio async_read_until的一般问题。文档说,调用处理程序时,缓冲区内可能有更多数据。有没有办法解决这个问题,并在匹配序列条件后立即阻止缓冲区消耗套接字中的字节?
问:有什么方法可以解决这个问题吗
不是直接的,因为网络流量的工作方式(它是面向数据包的)。
当然,如果发送方主动确保,您可能会在协议边界上得到一些东西,但这对于流协议来说是不寻常的。
Q. 并在匹配序列条件后立即停止缓冲区消耗套接字中的字节?
否,但您可以停止使用缓冲区。因此,例如,这是一个有效的模式:
boost::asio::streambuf sb;
auto bytes = boost::asio::read_until(socket, sb, "rnrn");
std::istream is(&sb);
std::string line;
while (getline(is, line) && !line.empty()) {
std::cout << "Received: '" << line << "'n";
}
// sb still contains un-consumed data, if any
只需使用相同的streambuf
进行任何后续读取,它就会为您管理"流位置"。
相关文章:
- 为什么简单的算术减法在"if"条件下不起作用?
- 在没有密钥的情况下读取密文的剩余噪声预算
- 在什么条件下使用 std::memcpy 在对象之间复制是安全的?
- 在 c++ 中连接字符串和整数,以便在 C++ 11 不支持计算机的情况下读取多个文件
- 改进简单条件下C++样式
- 唤醒多个线程以在每个条件下工作一次
- 如何在不知道大小的情况下读取文本文件并存储到数组中
- "is defined"宏检查及其调用必须处于不同的条件下吗?
- 在if条件下,右或左改变值的相等性检查是否有任何区别
- C++代码在 for 循环的条件下给出运行时错误,而如果它被具有相同意义的代码替换,则编译正确
- 在 constexpr-if 条件下比较 constexpr 函数参数会导致错误
- 轮班操作在条件下使用的说明
- 在不同条件下无法访问我的向量变量
- 在某些条件下最大化 GCD
- 如何更改此空隙函数,以便在特殊条件下返回一个生成的字符串
- 在if-Statement条件下与分配有关的错误
- 如何正确使用“ sizeof”操作员在循环的条件下正确使用
- 在不使用getline的情况下读取C 中的stdin
- 提升::MSM 检查保护条件下的状态转换
- 提升 asio async_read_until在匹配条件下停止读取