在处理之前完全接收TCP / IP。如何知道是否已收到发送的总数据?

时间:2013-03-28 09:05:54

标签: c++ boost-asio

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

             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;
            }

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

1 个答案:

答案 0 :(得分:2)

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

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