1

目前我正在通过以下方式同步接收数据

             boost::array<char, 2000> buf;
             while(true)
            {
                std::string dt;
                size_t len = connect_sock->receive(boost::asio::buffer(buf, 3000));
                std::copy(buf.begin(), buf.begin()+len, std::back_inserter(dt));
                std::cout << dt;
            }

我的问题是这种方法是否足够有效以接收超过缓冲区大小的数据。有什么方法可以让我确切知道有多少数据可用,以便我可以相应地调整缓冲区大小?(这样做的原因是我的服务器向一个请求发送了一个特定的响应,该请求只有在整个响应存储在字符串变量中时才需要处理。

4

1 回答 1

2

如果您使用 TCP 发送数据,则必须在应用程序协议级别处理此问题。

例如,您可以为每个请求添加一个标头,其中包含构成请求的字节数。接收者在读取并解析了标头后,将知道需要读取多少字节才能获取请求的其余部分。然后它可以重复调用receive(),直到它获得正确的数据量。

于 2013-03-28T09:26:02.290 回答