問題タブ [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++ - SCons、Boost::ASIO、Windows プリコンパイル済みヘッダー、およびリンカー エラー
複数のプラットフォーム用に C++ を開発しているため、ビルド プロセスに SCons を使用することを調査しています。ビルド構成は 99%完了していますが、Windows でプリコンパイル済みヘッダー ファイルに関係する非常に奇妙なエラーが発生しています。さらに奇妙なのは、それが 1 つのプロジェクトでのみ発生することです。
このプロジェクトの SConscript ファイルには、Windows で PCH をコンパイルするための次のものが含まれています。
また、プロジェクト内のすべてのファイルに MyPCH.h を強制的に含めるようにコンパイラ フラグを設定しています。
すべてがうまくいき、完全にうまくコンパイルされます。次のようなリンカ エラーのページやページが表示されるのは、最終的な DLL リンク ステージまでではありません。
と:
これは不可解です。なぜなら、私がリンク警告を受け取っているクラスはどれもboost::asioを使用していないからです.
さらに困惑するのは、プリコンパイル済みヘッダー ファイルのコンパイルを無効にしても、インクルードを強制すると、すべてが正常にコンパイルおよびリンクされることです。それはただ永遠におかしくなります。
これらのリンカ エラーの原因について何か手がかりを持っている人はいますか?
前もって感謝します。
- - 編集 - -
SCons が PCH を構築するために出力しているコマンド ラインを次に示します (マイナス インクルード パス)。
コンパイル中のファイルのコマンド ラインを次に示します (ここでもインクルード パスは省略しています)。
最後に、リンク コマンド ラインを次に示します。
また、PCH ヘッダーは個々のファイルごとに明示的に含まれているわけではありませんが、コマンド ライン オプションでは、プロジェクトでコンパイルされたすべてのファイルに PCH を強制的に含める /FI があります。
qt4 - Boost.AsioメインループをQt4やGTKなどのGUIフレームワークに統合する方法
Boost.AsioをQt4(推奨)またはGTKメインループと統合する方法はありますか?GTKはAPIのようなpoll(2)を提供するので、技術的には可能であるはずです。Qtは独自のネットワーク層を提供しますが、私はBoost.Asio用に作成された既存のコードを使用することを好みます。追加のスレッドを使用せずにそれらを統合したいと思います。
Qt4(推奨)またはGTKmmでこれを行う方法についての参考資料はありますか?
ありがとう。
編集
答えを簡単にするために、いくつかのことを明確にしたいと思います。QtとGTKmmはどちらも「selectlike」機能を提供します。
- http://qt-project.org/doc/qt-5.0/qtcore/qsocketnotifier.html
- http://www.gtkmm.org/docs/glibmm-2.4/docs/reference/html/group__MainLoop.html
したがって、問題は、既存の「セレクター/ポーラー」をリアクターとしてBoost.Asioに統合する方法ですio_service
。現在、Boost.Asioは、select、kqueue、epoll、/ dev / poll、およびiocpをreactor/proactorサービスとして使用できます。GUIフレームワークのメインループに統合したいと思います。
任意の提案と解決策(より良い)は大歓迎です。
c++ - Boost::Asio::Ip::Tcp::Iostream に関する質問
std::vector を送信できるように TCP サーバーとクライアントを実装しようとしましたが、これまでのところ失敗しました。Asio のブースト ドキュメントが (控えめに言っても) 不足しており、理解しにくい (英語は私の第一言語ではありません) ことがわかりました。
いずれにせよ、私は iostreams の例を見て、オブジェクト指向のソリューションを実装しようとしましたが、失敗しました。
実装しようとしているサーバーは、複数のクライアントからの接続を受け入れることができる必要があります (どうすればよいですか?)
サーバーは std::vector を受信し、 /* 何かを実行 */ し、それをクライアントに返して、サーバーがデータをそのまま受信したことをクライアントが認識できるようにする必要があります。
*.h ファイル
*.cpp ファイル
クライアントはどのように見えるべきですか?両方のアプリが「会話」している間、接続を維持するにはどうすればよいですか?
c++ - ブースト リンカー エラー: 未解決の外部シンボル "class boost::system::error_category const & __cdecl boost::system::get_system_category(void)"
初めて Boost を使い始めたところです。詳細は次のとおりです。
- Visual Studio 2008 SP1 を使用しています
- x64ビルドを行っています
- 私はboost::asioのみを使用しています(およびそれが持つすべての依存関係)
コードがコンパイルされ、プロジェクトをブースト ライブラリ (x64 ライブラリをビルドした後) に向け、単純な問題を乗り越えました。現在、リンカー エラーに直面しています。
何か案は?
この定義を追加しました: #define BOOST_LIB_DIAGNOSTIC
そして今、私の出力には次のように表示されます。
これは、システム lib で実際にリンクしていることを示しているようです。
c++ - ブースト asio: 0 バイト書き込み
asio を使用しているときに発生する特有の問題を理解するための助けが必要です。
私はクライアントサーバーアプリを持っており、C ++クライアント(boost asioを使用)が2バイトのハートビート(たとえば、毎秒)をサーバー(Javaで記述)に送信します(大量のデータも受信します)。
かなりの数分間、サーバーは2バイトのハートビートを正しく受信しますが、その後、サーバーの「読み取り」は0バイトの読み取りを訴え、接続を閉じます(ブロッキング読み取りでは正しいと思います)。ただし、クライアントは常に正しい金額を転送していることを出力します。
私は、関数の「書き込み」ファミリのほぼすべてのバリアントを試しました。それらはすべて「write_some」に関して実装されていますか?それは、この動作が期待されていることを意味しますか?
基本的に、asio内で書き込み(少なくとも1バイト)を保証するものを探しています。どこが間違っているのかを理解するのを手伝ってください(さらに情報が必要な場合)...アドバイス、大歓迎です!ありがとう!
c++ - boost :: asio:async_acceptを使用して着信接続を受け入れるにはどうすればよいですか?
私はboost::asioを使用しており、次のようなコードがあります。
このコードは機能しますが、Acceptor :: async_acceptの使用に切り替えて、Acceptor::cancelを呼び出してリクエストの受信を停止できるようにします。
したがって、私の新しいコードは次のようになります。
しかし、このコードは機能していないようです。私の関数CServer::HandleAcceptが呼び出されることはありません。何か案は?サンプルコードを見てきましたが、私のコードとそのコードの主な違いは、ソケットをメンバーとして持つtcp_connectionのようなクラスを作成することが多いようですが、なぜそれが必要なのかわかりません。
- アレックス
c++ - Boost ASIO で一時的に利用できないリソース
メソッド receive_from() を使用すると、「リソースが一時的に利用できません」というエラー メッセージが表示されます。これは、ここにあるip::udp::socket のメンバーです。
これに渡すのは、boost::asio::buffer、エンドポイント オブジェクトへのポインター、フラグ (ゼロに設定)、および error_code オブジェクトです。
エンドポイントを作成するだけです
このエラーメッセージについても、あまり情報がないようです。複数のマシンで試しましたが、常にこのエラーが発生します。
winsock - AsiodllをブーストしてWindows2000でws2_32.dllエラーを発生させる
ネットワーキングにブーストAsioを使用するdllがあります。このdllをWindows2000で実行されているアプリケーションにリンクすると、ランタイム例外がスローされます。
プロシージャエントリポイントfreeaddrinfoがダイナミックリンクライブラリWS2_32.dllに見つかりませんでした。」
Microsoftはhttp://msdn.microsoft.com/en-us/library/ms737931(VS.85).aspxで回避策を提供していますが、それは私にはうまくいきませんでした。
誰かが私に解決策を教えてもらえますか?
どうもありがとう、
--Vijay
c++ - ソケット: データを受信/解析するときに「待機」せずにクライアントにデータを送信する方法
boost::asio を使用して C++ で記述されたソケット サーバーがあり、クライアントにデータを送信しています。
サーバーはデータをチャンクで送信し、クライアントは受信時に各チャンクを解析します。現在、どちらもほぼシングルスレッドです。
サーバーができるだけ速くデータを書き出すだけで、クライアントがデータを解析するのを待たないようにするには、サーバーでどのような設計を使用すればよいですか? サーバー上で非同期に何かをする必要があると思います。
これを達成するためにクライアントにも変更を加えることができると思いますが、理想的には、クライアントの記述方法に関係なく、サーバーはクライアントを待機するべきではありません。
次のようにソケットにデータを書き込んでいます。
アップデート:
Boost のメカニズムを使用して、ソケットに非同期で書き込みを試みます。http://www.boost.org/doc/libs/1_36_0/doc/html/boost_asio/tutorial/tutdaytime3/src.htmlを参照してください。
例えば
- アレックス