問題タブ [boost-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とfilei/ oはどうなっていますか?
boost.asioには、ソケット、シリアルポート、およびあらゆる種類のファイル以外の例を含む多くの例があることに気づきました。Googleは、asioが非同期ファイルI / Oを実行するための優れたアプローチであるか、有効なアプローチであるかについて言及している私にとって、あまり多くのことを明らかにしていません。
非同期でディスクに書き込みたいデータの塊があります。これは、Windows(私のプラットフォーム)でネイティブのオーバーラップされたioを使用して実行できますが、プラットフォームに依存しないソリューションが必要です。
興味があります
- boost.asioはあらゆる種類のファイルをサポートしています
- boost.asioファイルのサポートは、日常のファイルI/Oに対して十分に成熟しています。
- ファイルサポートは追加されますか?これの見通しはどうですか?
c++ - Boost.Asio を使用するときに有効なオブジェクトの寿命を確保する最善の方法は何ですか?
最近Boost.Asioでよく遊んでいます。このライブラリは、今日のマルチコア システムからパフォーマンスを引き出す素晴らしい方法を提供してくれるので、とても気に入っています。
Asioで非同期呼び出しを行うときのオブジェクトの寿命/所有権に関して、私は何度か自問しましたが、捨てる価値があると思いました。
私が繰り返し遭遇した問題は、非同期コールバックがまだ保留中のオブジェクトを「期限切れ」にしなければならないことが非常に多いということです。コールバックが呼び出される前にそのオブジェクトが範囲外になると、必然的に事態は悪化します。
これに対抗するためにboost::enable_shared_from_this
、ほとんどの asio ベースのクラスの基本クラスとしてテンプレートを使用することにしました。これは問題なく動作しますが、少し面倒です。通常、これは、コンストラクターを保護し、ファクトリ メソッドをクラスに追加して、すべてのインスタンスが shared_ptr 内に作成されるようにすることも意味します。
他の人がこの問題にどのように取り組んだか知りたかっただけです。私はこれを最善の方法で行っていますか?それとも、私の Asio.Foo がすべて間違っているのでしょうか?
議論... :)
boost - asio を使用してノンブロッキング読み取りを実行するにはどうすればよいですか?
boost::asio を使用して、シリアル ポート上のデバイスから読み書きしようとしています。読み取るものが何もない場合は、boost::asio:read() と boost::asio::serial_port::read_some() の両方がブロックされます。代わりに、この状態を検出し、ポートにコマンドを書き込んでデバイスをキックスタートさせたいと考えています。
利用可能なデータがないことをどのように検出できますか?
必要に応じて、すべてを非同期で行うことができます。できれば、余分な複雑さを避けたいだけです。
c++ - asioとエンディアンをブースト
わかりませんが、ブーストasioはエンディアンを処理しますか?
c++ - デバイスの再接続後のboost::asio::serial_portの読み取り
boost::asio::serial_port クラスで GPS デバイス (USB-Serial) からの読み取りに問題があります。デバイスの接続とそこからの読み取りは正常に機能しますが、デバイスを切断して再接続すると、read_some はポートからバイトを読み取りません。
ブーストはシリアルポートがなくなったことを検出できないため ( is_open() が true を返す)、データを取得できない場合は定期的にデバイスをキャンセル()、クローズ()、およびオープン( GPS_PORT )し、ポートオプションをリセットします。途中。しかし、これも役に立ちません。入力バッファーは空のままです。
私は何かを見逃していますか、何か間違っていますか、それとも asio のバグですか? ポートがなくなったことを検出する標準的な方法はありますか?
c++ - tcp::resolver::query を構築するためのパラメータが何なのか本当に理解できません
Boost.Asio を開始し、公式 Web サイトにある例を機能させようとしています。
クライアントコードは次のとおりです。
質問は、コマンド プロンプトからプログラムを実行するためのパラメーターが何であるかがわからないということです。
c++ - サーバーアプリがリッスンしているポートをboost.asioがどのように検出するのですか?
クライアントアプリがサーバーに接続するときに、IPアドレスとポートを使用するという基本的な概念をboost.asioが使用しないのは、私には少し奇妙です。私はBoostの初心者かもしれません-そして私はそれを受け入れます-とにかく私は理解していません.
したがって、クライアントをローカルホスト上のサーバーに接続するための次のようなコードがあります。
WinSock 2.0 の Windows は、IP とポートの 2 つのパラメーターを使用してサーバーを識別します。
質問は、サーバーが接続をリッスンしているポートを Asio がどのように正確に検出するのかということです。すべてのポートをスキャンしますか? もしそうなら、2 つのサーバーが同時に異なるポートでリッスンするとどうなりますか?
c++ - Boostを使用してデータ構造をシリアライズして送信しますか?
次のようなデータ構造があります。
boost::serialization を使用してこのデータ構造をシリアライズし、boost::asio を使用して TCP/IP 経由で送信し、別のアプリケーションにデータを受信させ、同じブースト ライブラリを使用してデシリアライズしたいと考えています。
私はboost::serializationのチュートリアルに従おうとしていますが(他のSOの質問が示唆しているように)、この例は特にboost::asioを使用したソケットではなく、ファイルへの書き込み/読み取り用です。
私は仕事に適したツールを持っていると確信しています.それらを連携させるための助けが必要です. ソケットへの書き込みは、ファイルへの書き込みとそれほど違いはありませんよね?
どんな提案でも大歓迎です。ありがとう!
c++ - boost::asio::ip::tcp::resolver::resolve() は永久にブロックします
boost.asio の例にあるこのコードに似たものを作成しようとしています。
ソケット.h:
ソケット.cpp:
g++ はこれをエラーなしでビルドしますが、コードが resolver.resolve() 呼び出しを通過することはありません。
ホストには「127.0.0.1」と「localhost」、ポートには「80」の両方を試しました。(問題ではないと思いますが、apache2 は稼働しています)
アプリケーションからctrl + cを押すと、明らかに終了しますが、終了する直前に「文字列に接続しています」と出力されます。
私は自分で例を作成し、同じ問題が発生するかどうかを確認することを計画しており、間違いなくここに結果を投稿します. 誰かがこの問題に遭遇したか、またはこの動作の原因を知っていますか?
編集:
この例は問題なく実行されます...デバッグを行う必要があると思います。
2番目の編集:
わかりません。異なる可能性があるのは、ホスト/ポートだけです。
例では char* argv[] を使用しており、私は以下を使用しています:
3番目の編集:
確かに接続時にブロックされているようで、fflush(stdout)を忘れていました。それならソケットに問題があるはずです。さらにテストを行う予定です。
4番目の編集:
ばかげて、まったくブロックされていませんでした!私はコンソール出力に頼りすぎていました..