問題タブ [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を使ってサーバーを書いています。接続ごとに読み取りおよび書き込みバッファーがあり、非同期読み取り/書き込み関数 ( async_write_some
/ async_read_some
) を使用します。
読み込みバッファとがあればasync_read_some
問題ありません。async_read_some
読み取りバッファは読み取りハンドラーでのみ読み取られるため(通常は同じスレッド内を意味します)、関数を呼び出すだけでかまいません。
ただし、書き込みバッファは複数のスレッドからアクセスする必要があるため、変更のためにロックする必要があります。
最初の質問!
書き込みバッファのロックを回避する方法はありますか?
独自のパケットをスタック バッファーに書き込み、それを書き込みバッファーにコピーします。次に、関数を呼び出しasync_write_some
てパケットを送信します。このように 2 つのパケットをシリアルに送信する場合、async_write_some
関数を 2 回呼び出しても問題ないでしょうか?
2番目の質問!
ソケットプログラミングにおける非同期書き込みの一般的な方法は何ですか?
読んでくれてありがとう。
c++ - Asio で 2 つのデバイス/ストリームをブリッジするエレガントな方法はありますか?
Asioで2 つのストリーム指向の I/O オブジェクトが与えられた場合、一方のデバイスから他方のデバイスに双方向でデータを転送する最も簡単な方法は何ですか? これは、おそらくboost ::iostreams::combinationまたはboost::iostreams:copyで行うことができますか? それとも、両端でデータを待ってから、もう一方のストリームに書き出す手動のアプローチの方がよいでしょうか? 言い換えれば、BoostとAsioを活用して最小量のコードを生成するにはどうすればよいでしょうか?
サンプル アプリケーションは、この質問で要求されているように、シリアル ポートと TCP ソケットの間でストリーミングします。
boost - Boost.Asio同期通信
asioの使用に問題があります。私のクライアント/サーバー アプリケーションは、同期通信のみを必要とします。そこで、Boost のホームページのシンクロの例を使用して、データを送受信するための 2 つの手順をセットアップしました。コードは次のとおりです。
これらの手順は、boost の例から抽出されたコード行の単なるラッパーです。
私のテスト アプリケーションでは、クライアントが呼び出します
そしてサーバー呼び出し
機能をテストするだけです。問題は、次の図に示すように、最初の情報交換後に両方のアプリケーションがフリーズすることです。サーバー側でvSend()が終了している間、クライアント側でvReceive()プロシージャが終了していないようです。それで、誰かが何か考えがありますか、何が間違っているのでしょうか?
誰かが問題を再現したい場合に備えて、ソースの完全なソースを同じサーバーにアップロードしました。このサーバーでは、写真が asio_problem.rar ファイルに含まれています (新しいメンバーとして、投稿ごとに 1 つのハイパーリンクを設定できます)。
よろしくお願いします、ダニエル。
boost-asio - boost.asio、asioを使用して完全なIPパケットを読み取る方法
ソケットポートを読み取り、IPパケットを受信するたびに制御を返す機能を使用したいと思います。
boost :: asio :: ip :: udp :: socketには、読み取られたバイト数を返す関数receive(またはasync_receive)があります。ドキュメントには次のように記載されています。接続されたソケットでデータを受信します。
現在、「一部の」データを決定するものは私にはわかりません。システムが受信データを返すか、待機して読み取るかをシステムが決定する方法がわかりません。これが私の質問につながります。
asioを使用して完全なIPパケットを読み取るにはどうすればよいですか?
Javaでは、関数DatagramSocket.receive(...)を呼び出すことができます。これは、私がやろうとしていることを正確に実行します。
最高、Dd
c++ - ブースト asio の例が mac osx でクラッシュする
MacOSX 10.5 で Boost asio の例から blocks_udp_echo_server.cpp を実行しようとしています。
しかし、それはクラッシュします:
バックトレースから:
誰でも何か考えがありますか?
c++ - boost::bind、boost::asio、boost::thread、およびクラス
これは、クラス「sau_timer」のコンストラクターにあるコードです (別のスレッドでタイマーを実行し、別の関数を呼び出すことを願っています)。
残念ながら、atm をコンパイルしようとすると、次のエラーが発生します。
1>c:\program files\boost\boost_1_39\boost\bind\bind.hpp(246): エラー C2064: 項は 1 つの引数を取る関数に評価されません
同様に、たくさんの警告があります。私は何を間違っていますか?考えられることはすべて試しました、ありがとう。
c++ - Boost.Asio iostream フラッシュが機能しない?
なぜstream.flush();
うまくいかないのですか?
ループが削除され、行が実行された場合にのみフラッシュされます
boost::this_thread::sleep(boost::posix_time::seconds(1));
(かなり後で)。
ありがとう
更新:さらにデバッグを行いましたが、実際には問題はフラッシュコマンドではありません。コードを netcat サーバーに接続させると、すべて正常に動作します。問題は、クライアントとサーバーの両方が同じプロセスにあることだと思います(1つはサーバーとして機能し、もう1つはクライアントとして機能する2つの脅威を作成します)。それらを別々のプロセスに入れるとすべて正常に動作しますが、両方が同じプロセスにあると、スリープが呼び出されるまで転送が停止します... (これはテスト上の理由のみであり、後で両方が異なるサーバーで実行されます)。
プラットフォームは WindowsXP です。
なぜこれが起こっているのですか?
c++ - ブースト スレッドとタイマー、C++
カスタムクラス「sau_timer」のコードは次のとおりです。
sau_timer オブジェクトを作成すると、タイマーが開始されますが、プログラムの実行は継続できるようにしたいと考えています。たとえば、これは main() です。
ここでの私の意図は、timer_test が作成され、sau_prompt("Hello!") を呼び出す前に 3 秒待機するタイマーを開始することですが、sau_prompt("First!") が最初に呼び出されます。現時点では、First の前のプロンプトに Hello が表示されており、タイマーがプログラム全体を 3 秒間停止してから続行できることを示しています。タイマーをバックグラウンドで実行したい。
私は何を間違っていますか?コードはコンパイルされます...
ありがとうございました。
c++ - async_resolve ハンドラーで「サービスが見つかりません」というエラーが発生する
次のようなコードがあります。
サーバーの適切なゲートとポートを使用してこのコードを実行すると、ログ ファイルに次のテキストが表示されます: エラー: サービスが見つかりません
このエラーが実際に何を意味するのかについて、誰かが洞察を提供できますか?
linux - Linux で Boost ライブラリをリンクする
Boost の Asio を使用してプロジェクトをビルドしようとしていますが、問題が発生しています。最初は、すべてがヘッダー ファイルにあると思われるため、追加のライブラリを使用せずにプロジェクトをビルドしようとしました。
私が構築しようとしているプログラムは次のようになります。
これは、Boost の Web サイトで見つけることができます。
だから、最初は私が持っていた:
これにより、次のエラーが発生しました。
システム ライブラリが必要なようです。そのため、ここにある入門ガイドの指示に従いました。これにより、 /usr/include/boost_1_40_0/stage/lib にある一連のライブラリが得られました。その中にはlibboost_system.aがありました。したがって、次のようにコンパイルしようとしました。
しかし、私はこれを得ました:
理由はわかりませんが、試したライブラリや他のライブラリを特定できないようです。何が間違っている可能性がありますか? 前もって感謝します!