gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 04:19:43 24 4
gpt4 key购买 nike

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

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

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

最佳答案

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

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

关于c++ - 在处理之前完全接收 TCP/IP。如何知道发送的全部数据是否已收到?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15677821/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com