【发布时间】:2013-09-02 16:17:05
【问题描述】:
我正在阅读来自 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_ 来包含客户端的 请求,io_service 对象将返回一个错误,如果客户端 发送任何更大的东西。如果出现这样的错误,我们可以忽略。
但是无论如何都可以在没有缓冲区大小的情况下阅读整个消息?就像每个字符循环receive_some并存储在一个字符串中?
【问题讨论】:
-
也许这是为了按字节接收字节?
-
"由于我们只提供 1 字节的 recv_buffer_ 来包含客户端的请求,所以如果客户端发送了更大的内容,io_service 对象将返回错误。如果出现此类错误,我们可以忽略。" (来自您的链接)
-
感谢指点。我错过了帽子点。这里有像
receive_some这样的东西吗?它将循环接收到的消息直到它结束并继续附加到缓冲区?这样我就不需要保留固定大小的缓冲区了?
标签: c++ boost boost-asio