boost.asioは、クライアントアプリケーションがサーバーに接続しているときに、IPアドレスとポートを使用して基本コンセプトを使用していません。私はBoostの少しのnoobieかもしれません - と私はそれを受け入れる - とにかく私は理解していません。
だから、私は、ローカルホスト上のサーバーに接続しているクライアント取得するには、このようなコードを持っています。サーバーを識別するために - - IPとポートのWinSockの2.0に私のサーバーアプリケーションがどのポートをリッスンしているかを、boost.asioがどのように発見するのか?
boost::asio::io_service io_service;
tcp::resolver resolver(io_service);
tcp::resolver::query query("localhost", "daytime");
tcp::resolver::iterator endpoint_iterator = resolver.resolve(query);
tcp::resolver::iterator end;
tcp::socket socket(io_service);
boost::system::error_code error = boost::asio::error::host_not_found;
while(error && endpoint_iterator != end) {
socket.close();
socket.connect(*endpoint_iterator++, error);
}
Windowsは、2つのパラメータを使用しています。
したがって、どのポートが接続をリッスンしているサーバーであるかをAsioがどのくらい知っていますか?すべてのポートをスキャンしますか?そして、そうであれば、同時に2つのサーバーが異なるポートでリッスンするとどうなりますか?
私は2番目のパラメータがクエリーctorで何を意味するのかよく分かりません。最初のIPアドレスは私が接続したいIPアドレスです。そして第二の意味は何ですか? – chester89
2番目のパラメータは、ポート番号またはサービス名です。サービス名の場合、asioはサービスファイル内でそのサービスの適切なポート番号を検索します。テキストエディタでサービスファイルを見ると、その動作方法がわかります。 – Ferruccio
OK、必要なポートでサーバを起動するにはどうすればいいですか?サーバー側のコードは次のとおりです。 boost :: asio :: io_service io_service; tcp :: acceptorアクセプタ(io_service、tcp :: endpoint(tcp :: v4()、13)); – chester89