es un poco extraño para mí que boost.asio no utilice un concepto básico cuando la aplicación del cliente se conecta al servidor, usando la dirección IP y el puerto. Puede ser que sea un poco novato en Boost, y lo acepto, pero de todos modos no entiendo.
lo tanto, tengo un código como este para obtener cliente conectado al servidor en el host local:¿Cómo boost.asio descubre en qué puerto está escuchando mi aplicación de servidor?
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);
}
de Windows en su WinSock 2.0 utiliza dos parámetros - IP y el puerto - para identificar el servidor.
Entonces, la cotización es: ¿cómo exactamente Asio descubre en qué puerto está escuchando el servidor las conexiones? ¿Escanea todos los puertos? Y, si lo hace, ¿qué sucederá si dos servidores están escuchando en diferentes puertos al mismo tiempo?
No entendí muy bien qué significa el segundo parámetro en query ctor. la primera es la dirección IP a la que me quiero conectar, ¿verdad? y ¿qué significa el segundo? – chester89
El segundo parámetro es un número de puerto o el nombre de un servicio. Si se trata de un nombre de servicio, asio lo buscará en el archivo de servicios para encontrar el número de puerto apropiado para ese servicio. Eche un vistazo al archivo de servicios con un editor de texto y verá cómo funciona. – Ferruccio
bien, entonces ¿cómo puedo iniciar un servidor en un puerto que necesito? el código para eso en el lado del servidor es: boost :: asio :: io_service io_service; tcp :: aceptor acceptor (io_service, tcp :: endpoint (tcp :: v4(), 13)); – chester89