Как boost.asio определяет, какой порт прослушивает мое серверное приложение?

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

  •  06-09-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

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

Другие советы

Пытаться,

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

Чтобы ответить на ваш вопрос, напомните, что вы запускаете сервер на порту 13.Это порт, на котором работает дневная служба Linux. (http://www.sorgonet.com/linux/linuxdaemons/).Следовательно, впоследствии они смогут использовать запрос («localhost», «daytime») вместо указания порта.

Откройте Netcat Слушайте порт 13 на Localhost, он примет соединение демонстрации.Введите немного Blabla, когда он подключается, и вы увидите вывод в демонстрационной программе для запуска NetCat, запустите:нк -л -п 13

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top