boost asio udp async_read_from buffersize
boost asio udp async_read_from buffersize
我正在阅读boost asio教程中的UDP daytime example
。它使用recv_buffer_
并使用async_receive_from()
来运行接收循环。
socket_.async_receive_from(
boost::asio::buffer(recv_buffer_), remote_endpoint_,
boost::bind(&udp_server::handle_receive, this,
boost::asio::placeholders::error,
boost::asio::placeholders::bytes_transferred));
我不明白的是
boost::array<char, 1> recv_buffer_;
为什么它的大小是一?如果接收到的消息长度超过一个字节,该怎么办?
编辑
正如@Guy Sirton指出的那样,我错过了那一页上写的hsi部分。
由于我们只提供1字节的recv_buffer_来包含客户端的请求时,如果客户端发送任何更大的。如果出现这样的错误,我们可以忽略它。
但是,是否可以在没有缓冲区大小的情况下读取整个消息?比如用每个字符循环receive_some
并存储在字符串中?
需要缓冲区大小。
UDP保留消息边界。当从套接字读取数据时,即使提供的缓冲区的大小小于消息,它也会一直读取到消息边界。当消息大小大于缓冲区时,错误代码将设置为boost::asio::error::message_size
。
分配一个足够大的缓冲区来读取预期的最大消息大小,或者使用reactor样式的操作来延迟分配缓冲区。
相关文章:
- 使用 ImageIO.read() 生成的图像是否仍然使用传递给它的相同内存?
- std::ifstream::read 不会读取所有 512 字节,并设置 EOF 和失败位
- write() 和 read() 中几乎没有混淆
- C++ TCP 套接字通信 - 连接按预期工作,几秒钟后失败,没有收到新数据,read() 和 recv() 块
- 为什么调试器引发"read access violation. this was nullptr"异常?
- 对同一文件使用 .read 的次数是否有限制?
- Win32 API - HWND "{unused = ???} Unable to read memory"错误
- 为什么我会"Invalid read of size 8"?(瓦尔格林德)
- QDataStream read to QVector
- asio::read() 需要很长时间,使用 asio::write 没有问题
- Read OpenCV Mat 16bit to QImage 8bit Greyscale
- 如果 I/O read() 处于阻塞阶段,如何使用 Ctrl+C 退出 C++ 程序?
- 如何将 (serverClients[i].read() 传递给 ESP8266 上的字节数组
- 将 Lora.read() 转储到数组
- 无法通过 FUSE 文件系统"read"任何内容
- 指向 std::unrodered_map 中元素的指针返回'Read access violation'
- 封送指向结构异常"cannot Read or Write protected memory"的指针数组的指针数组
- C++HTTP客户端在GET请求后挂起read()调用
- 从带有 std::ifstream::read() 的文件中读取 int 遍历 char * 二进制数据
- Arduino Uno - serial.read to a struct of bits