我有一个 TCP 客户端连接到我的服务器,它正在发送原始数据包。如何使用 Boost.Asio 每次都能获取“整个”数据包(当然是异步的)?假设这些数据包可以是任意大小,最多可达我的内存的完整大小。
基本上,我想避免创建静态大小的缓冲区。
通常,当您在 TCP/IP 之上构建自定义协议时,您会使用简单的消息格式,其中前 4 个字节是包含消息长度的无符号整数,其余是消息数据。如果你有这样的协议,那么接收循环就像下面一样简单(不确定什么是 ASIO 表示法,所以这只是一个想法)
for(;;) {
uint_32_t len = 0u;
read(socket, &len, 4); // may need multiple reads in non-blocking mode
len = ntohl(len);
assert (len < my_max_len);
char* buf = new char[len];
read(socket, buf, len); // may need multiple reads in non-blocking mode
...
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)