我有一个TCP客户端连接到我的服务器,该服务器正在发送原始数据包。如何使用Boost.Asio每次都(当然是异步地)获得“整个”数据包?假设这些数据包的大小可以是我的内存的全部大小。

基本上,我想避免创建静态大小的缓冲区。

最佳答案

通常,当您执行异步IO时,您的协议(protocol)应支持它。
一种简单的方法是在逻辑级别为字节数组添加前缀长度,并保留读取代码缓冲区,直到它有完整的缓冲区可供解析为止。

如果不这样做,最终将使这个逻辑散布在各处(请考虑读取以null结尾的字符串,以及每次select / poll返回时只得到其中一部分的含义)。

10-08 09:08