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 に答える