3

http://www.boost.org/doc/libs/1_39_0/doc/html/boost_asio/example/http/client/async_client.cppに HTTP クライアントの例があります。次のコードで説明されているように、最大​​バッファ サイズ を変更するのを手伝ってください(サイトからではなく、ライブラリでダウンロードされた例からのものです):

void handle_write_request(const boost::system::error_code& err)
{
  if (!err)
  {
    // Read the response status line. The response_ streambuf will
    // automatically grow to accommodate the entire line. The growth may be
    // limited by <b>passing a maximum size to the streambuf constructor</b>.
    boost::asio::async_read_until(socket_, response_, "\r\n",
        boost::bind(&client::handle_read_status_line, this,
          boost::asio::placeholders::error));
  }
  else
  {
    std::cout << "Error: " << err.message() << "\n";
  }
}

そして、応答バッファーのコンストラクターは次のとおりです。

boost::asio::streambuf response_;

しかし、コンパイラは次のコードが無効であると言います:

boost::asio::streambuf response_(1024);

デフォルトのバッファは512バイト サイズのようです。より大きなサイズが必要です。

4

1 に答える 1

0

1) のコンストラクターには次の署名があるため、512 バイトの制限がどこから来ているのかわかりませんasio::basic_streambuf(これにより、512 または 1024 バイトを超える方法を格納できます)。

explicit basic_streambuf(
    std::size_t max_size = (std::numeric_limits<std::size_t>::max)(),
    const Allocator& allocator = Allocator())

boost::asio::streambuf response_(1024);2)宣言ポイントでメンバー変数を初期化できないため、このコードは無効です。コンストラクターの初期化子リストまたはその本体で行う必要があります。そうしないと、デフォルトで初期化されます。

3)最大サイズを制限/制限するためのコードリファラーのコメントstreambuf-逆に、「より大きなサイズ」を取得するのに役立つことは間違いありません。

于 2010-11-04T07:40:04.523 に答える