おはようございます。私はちょうどboost :: asioライブラリを使い始めており、boost :: asio :: ip :: tcp :: iostreamに関連したいくつかの初期の難しさに遭遇しました。どのように1は、単にホストとポート番号を使用してのiostreamを接続しないブーストASIOのIP TCPのiostreamエラー検出
1):
私の質問は2つの部分がありますか?
clientとserver [boost.org]の例は、コード化された状態で正常に動作させることができます。サーバーはポートを明示的に指定します。
boost::asio::io_service io_service;
tcp::endpoint endpoint(tcp::v4(), 13);
tcp::acceptor acceptor(io_service, endpoint);
ポート13は、「昼間」サービスのためのよく知られたポートです。
クライアントの例では、ホストおよびサービス名指定して接続します。私自身のアプリケーションのために
tcp::iostream s(argv[1], "daytime");
を、私は、任意のポートにサーバーを配置し、以下に示すように数で接続したいと思います:
サーバー:
boost::asio::io_service io_service;
tcp::endpoint endpoint(tcp::v4(), port);
tcp::acceptor acceptor(io_service, endpoint);
acceptor.accept(*this->socketStream.rdbuf());
...
クライアント:
boost::asio::ip::tcp::iostream sockStream;
...
sockStream.connect("localhost", port);
...
クライアントでポート番号を(サービス名ではなく)直接指定しようとすると、ストリームの接続に失敗します。これを行う方法はありますか?接続する議論がどんなものでなければならないかは、私には分かりません。
2.)iostream :: connectの呼び出しの成功をテストするための好ましい方法は何ですか?
この関数はvoidを返し、例外はスローされません。私が今までに考案した唯一の方法は、stream.fail()および/またはstream.good()をテストすることです。これを行う方法なのか、それとも別の方法がありますか?
これらのいずれかまたは両方に関するアドバイスをいただければ幸いです。また、適切なドキュメンテーションやサンプルが見落とされている場合は、うまくいくでしょう。これまで私は図書館のドキュメントを読んだり、ネットを検索したりして、これらの質問に答えることができませんでした。
ありがとうございました。そこで、tcp :: socketを取得し、tcp :: iostreamの内部に埋め込む方法はありますか? –
@Adam - わかりません。私はasioで作業していて、しばらくしています。私が見ているコードでは、iostreamを使用するのではなく、socket :: sendとsocket :: read_someを使用してソケットをI/Oに直接使用しています。 – Ferruccio
少し洗練された代替方法は、 sockStream.connect( "localhost"、lexical_cast(port))です。 –