問題タブ [asio]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - Boost::ASIO VS Qt ネットワーキング
ネットワークアプリケーションを作りたいです。Qtを使いたかったのですが、ネットワークライブラリが比較的大きいので、Boost::asioを学習しようとしましたが、同じくらいの大きさのようです
フットプリントが小さいライブラリとは? できるだけ小さく?Boost:ASIO または Qt を使用して、何らかの形で合理化してサイズを小さくすることはできますか? アプリケーションを 1MB 未満にする必要があります (可能であればさらに小さくする必要があります)。
c++ - boost::asio::async_read は、受信したデータのバイトがゼロで無限にループします
Async_write は正常に動作しますが、async_read は無限ループで実行される IO_Service ベースの非同期 TCP クライアントを作成しようとしています。問題を修正するための試行中に、他のすべてのケースでは async_read がデータの受信を停止するだけで、サーバーを停止するまで何も受信しないことがわかりました。以下は、クエリを投稿する前に試したコードとリンクです。
私が試した提案は、私の2、3とまったく同じですが、すべての場合において、私の async_read ハンドラは何も読み取りません。1 つだけのケースで、私が試した残りのケースのようにバッファを設定すると、無限ループが開始され 、async_readハンドラが発生しません。 boost::asio::mutable_buffer bytes;
boost::array<char, 512> bytes;
boost::asio::streambuf bytes;
char bytes[512];
これらの解決策をすべて試した後、私は混乱しています。バッファの問題でしょうか? read に渡す前に初期化する必要がありますか?
ガイドしてください。
asio - asio streambuf 可変バッファ型 - prepare() の使用方法
スタンドアロン asio を使用して、read_some でサーバーを実装しました。私のサーバーループは、ソケットから受信したすべてのデータを蓄積します。以下の簡素化されたコードは正しく動作しませんが、inbuf.prepare() ステートメントをループに移動することで修正できます。
prepare() がループの外にあり、接続が確立されてから読み取られた合計バイト数が 4096 境界を超える場合、 string はその境界までのデータのみを保持します。つまり、s は bytes_read よりも短くなります。prepare() をループの外に置きたい場合は、次のような消費ループが必要になると推測しましたが、これもうまくいきませんでした。
prepare() の役割と、なぜ繰り返し呼び出す必要があるのか を明確にすることはできますか?