1

boost::asio を使用してネットワーク プログラミングを実装し、タイミングの問題が発生しています。現在、問題はクライアントに最も多くあります。

プロトコルは、最初にサーバーが日時文字列をユーザーに返し、クライアントがそれを読み取ります。その部分までは正常に動作します。しかし、私が望んでいるのは、コマンドをサーバーに書き込んで処理できるようにすることです。これを実現するために、以下に示すように io_service.post() 関数を使用します。

io_service.post(boost::bind()); // bounded function calls async_write() method. 

何らかの理由で、ソケットがまだ作成されていないときに、最初のクライアント/サーバー通信の前に書き込み試行が発生します。そして、悪いソケット記述子エラーが発生します。

これで、io_service の run メソッドが実際に別のスレッドで呼び出されます。

post メソッドの前に sleep(2) コマンドを配置すると、正常に動作します。

ポストされた呼び出しが実行される前にソケットが作成されるように、これを同期する方法はありますか。

4

2 に答える 2

1

ソケットを作成し、を使用して接続を確立するboost::asioときに、これらの操作が完了または失敗したときに呼び出されるメソッドを定義できます。したがって、成功コールバックで「投稿された呼び出し」をトリガーする必要があります。

関連するメソッドとクラスは次のとおりです。

boost::asio::ip::tcp::resolver::async_resolve(...)
boost::asio::ip::tcp::socket::async_connect(...)
于 2012-11-27T07:01:57.817 に答える
0

以下のリンクだと思います

あなたにいくつかの助けを与えるでしょう

http://www.boost.org/doc/libs/1_42_0/doc/html/boost_asio/reference/io_service.html

于 2012-11-27T06:55:28.487 に答える