1

streambuf で async_read を使用しています。ただし、本文に行く前にヘッダーを適切に処理できるように、読み取るデータの量を 4 に制限したいと思います。

async_read を使用してそれを行うにはどうすればよいですか?

4

3 に答える 3

5

async_read最初の操作で 4 バイトのヘッダーを読み取り、2 番目の操作でメッセージ本文を読み取る2 つの操作を使用します。最初のハンドラーは、メッセージ本文async_readの を開始する必要があります。async_read

asio の例では、この手法をいくつかの場所で使用しています。シリアライゼーションの例はその 1 つです。同様の質問にも答えましたが、同期読み取りを使用していますが、概念は同じです。

于 2010-09-22T14:36:42.510 に答える
1

transfer_at_leastを async_read の CompletionConditionとして使用して、ヘッダーが使用可能であることを保証できます。

最初のヘッダーを処理すると、余分な本文データ (または追加のヘッダー) を処理できます。

于 2010-09-22T14:37:39.820 に答える
0
boost::asio::transfer_exactly(streambuf.size()) 

必要なものです。次のように使用してみてください:

boost::asio::async_read(socket_, 
                        buf,boost::asio::transfer_exactly(size_),
                        boost::bind(callback,
                        boost::asio::placeholders::error));
于 2014-07-25T04:01:21.290 に答える