Как boost.asio определяет, какой порт прослушивает мое серверное приложение? - PullRequest
5 голосов
/ 23 февраля 2009

мне немного странно, что boost.asio не использует базовую концепцию при подключении клиентского приложения к серверу - используя IP-адрес и порт. Может быть, я немного Noobie в 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);
        }

Windows в WinSock 2.0 использует два параметра - IP и порт - для идентификации сервера.
Итак, вопрос - как именно Asio узнает, на каком порту сервер прослушивает соединения? Сканирует ли он все порты? И если это произойдет, что произойдет, если два сервера одновременно прослушивают разные порты?

Ответы [ 3 ]

8 голосов
/ 30 июня 2009

Попробуйте,

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 ") вместо указания порта.

5 голосов
/ 23 февраля 2009

Вы говорите, что хотите подключиться к localhost через порт, используемый дневной службой. Он найдет соответствующий номер порта в файле служб (обычно это C: \ WINDOWS \ system32 \ drivers \ etc \ services под Windows, я думаю, что / etc / services под Unix). Вы также можете использовать явный номер порта там.

0 голосов
/ 03 марта 2010

open netcat слушает порт 13 на локальном хосте он примет соединение демо. при подключении наберите немного blabla, и вы увидите вывод демонстрационной программы чтобы запустить netcat, запустите: nc -l -p 13

окна? нет netcat? установите cygwin и добавьте netcat

...