5

クライアントアプリがサーバーに接続するときに、IPアドレスとポートを使用するという基本的な概念をboost.asioが使用しないのは、私には少し奇妙です。私はBoostの初心者かもしれません-そして私はそれを受け入れます-とにかく私は理解していません.
したがって、クライアントをローカルホスト上のサーバーに接続するための次のようなコードがあります。


        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);
        }

WinSock 2.0 の Windows は、IP とポートの 2 つのパラメーターを使用してサーバーを識別します。
質問は、サーバーが接続をリッスンしているポートを Asio がどのように正確に検出するのかということです。すべてのポートをスキャンしますか? もしそうなら、2 つのサーバーが同時に異なるポートでリッスンするとどうなりますか?

4

3 に答える 3

8

試す、

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

あなたの質問に答えるために、ポート 13 でサーバーを起動していることを思い出してください。これはたまたま Linux デイタイム サービスを実行するポートです(http://www.sorgonet.com/linux/linuxdaemons/)。したがって、その後、ポートを指定するのではなく、query("localhost","daytime") を使用できます。

于 2009-06-30T00:27:42.373 に答える
5

昼間のサービスで使用されるポートで localhost に接続することを伝えています。サービス ファイルで適切なポート番号を検索します (通常、Windows では C:\WINDOWS\system32\drivers\etc\services、Unix では /etc/services だと思います)。そこで明示的なポート番号を使用することもできます。

于 2009-02-23T18:49:50.160 に答える
0

ローカルホストのポート13でnetcatlistenを開き、デモの接続を受け入れます。接続時にblablaと入力すると、netcatを実行するためのデモプログラムの出力が表示されます。次のコマンドを実行します。nc-l -p 13

ウィンドウズ?ネットキャットはありませんか?cygwinをインストールし、netcatを追加します

于 2010-03-03T13:23:50.460 に答える