2

サーバーから文字データをフェッチする TCP クライアントをサポートするために区切り文字を使用asio::async_read_untilしています。'\n'このサーバー'\n'は、終了した回線を継続的に送信します。正確には、単一行または複数行の連結文字列を一度に書き込むことができます。

ドキュメントから、私はそれasio::async_read_untilが読むことができることを理解しています:

  • のような1'\n'行で終了します"some_data\n"std::getlineこれは最も単純なケースで、関連付けられたストリームでの呼び出しで処理されます。asio::streambuf
  • のように、 1 つの'\n'終了行と次の行の先頭"some_data1\nbla"std::getlineこれは;で処理できます。2 行目の残りの部分は、次の完了ハンドラ呼び出しで処理されます。
  • 多くの行; この場合、新しく読み取られたデータには 2 つ以上の'\n'. 不完全な回線 (最終的には将来のパケットで受信することになります) でstd::getline呼び出す危険を冒したくないことを知っている場合、何回の呼び出しを行う必要があるかをどのように知ることができますか? std::getline複数の存在を確認するためにストリーム バッファを覗く必要があります'\n'か? 多くのコピーを行わなくても可能ですか?
4

3 に答える 3