どのように私のサーバーアプリケーションがリッスンしているポートを発見boost.asio?

StackOverflow https://stackoverflow.com/questions/578794

  •  06-09-2019
  •  | 
  •  

質問

IPアドレスとポートを使用して -

これは、クライアントアプリケーションがサーバーに接続する際boost.asio doesnの `tは、基本的な概念を使用するように私には少し奇妙です。私はブーストで少しnoobie午前することができる - と、私はそれを受け入れる - とにかく、私は理解していない
。 だから、私は、ローカルホスト上のサーバーに接続されたクライアントを取得するには、このようなコードを持っています:


        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);
        }
サーバーを識別するために - IPおよびポート - そのWinSockの中に

のWindows 2.0には、2つのパラメータを使用しています。
ので、qurestionは - ASIOは、サーバが上の接続にリスニングするポートを見つけ出しどのように正確に?それは、すべてのポートをスキャンしていますか?そして、それがない場合は2台のサーバーが同時に異なるポートでリッスンしている場合、何が起こるのだろうか?

役に立ちましたか?

解決

あなたは昼間のサービスで使用するポート上でlocalhostに接続したいということを言っています。 (:私はUnixの下の/ etc / servicesのを信じて、\ \ WINDOWS \ SYSTEM32の\ドライバWindowsの下など\サービスを通常C)これは、servicesファイルに適切なポート番号を検索します。また、そこに明示的なポート番号を使用することができます。

他のヒント

試してみてください、

tcp::resolver::query query("localhost", boost::lexical_cast<string>(port));//assuming port is an int

あなたはポート13上のサーバーを起動している。これは、Linuxの昼間のサービス<のhref = "http://www.sorgonet.com/linux/linuxdaemons/を実行するポートであることを起こることを思い出し、あなたの質問に答えるために"REL =" noreferrer ">(http://www.sorgonet.com/linux/linuxdaemons/)の。したがって、彼らはその後、ポートを指定するのではなく、クエリ(「localhost」を、「昼」)を使用することができます。

オープンnetcatをローカルホスト上のポート13でリッスン それはデモの接続を受け入れます。それは接続したときに、いくつかのblablaを入力して、あなたは、デモプログラムの出力が表示されます netcatを実行するために、実行します。 NC -l -p 13

窓? netcatをなし? Cygwinをインストールし、netcatをを追加します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top