Cómo boost.asio descubrir qué puerto está mi aplicación de servidor escucha en?

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

  •  06-09-2019
  •  | 
  •  

Pregunta

es un poco extraño para mí que boost.asio doesn`t utilizan concepto básico cuando la aplicación cliente que se conecta al servidor - utilizando la dirección IP y el puerto. Puede ser que estoy un poco noobie poco en Boost - y acepto que -. Pero de todos modos no entiendo
Por lo tanto, tengo un código como este cliente para conectarse al servidor en el host local:


        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 en su WinSock 2.0 utiliza dos parámetros - IP y el puerto - para identificar el servidor.
Así, el qurestion es - ¿cómo es exactamente Asio se entera de qué puerto está escuchando las conexiones del servidor de? Hace que escanea todos los puertos? Y, si lo hace, ¿qué pasará si dos servidores escuchar en puertos diferentes al mismo tiempo?

¿Fue útil?

Solución

Se está diciendo que que desea conectarse al servidor local en el puerto utilizado por el servicio durante el día. Se buscará el número de puerto apropiado en el archivo de servicios (normalmente C: \ WINDOWS \ system32 \ drivers \ etc servicios de \ en Windows, creo que / etc / servicios bajo Unix). También es posible usar un número de puerto explícita allí.

Otros consejos

Trate,

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

Para responder a su pregunta, recordemos que está iniciando el servidor en el puerto 13. Esto pasa a ser el puerto que se ejecuta el servicio diurno Linux (http://www.sorgonet.com/linux/linuxdaemons/) "rel =" noreferrer. Por lo tanto, son posteriormente capaz de utilizar de consulta ( "localhost", "día") en lugar de especificar el puerto.

netcat abierta escuchar en el puerto 13 en el host local que aceptará la conexión de la demo. escriba algún blabla cuando se conecta y verá la salida en el programa de demostración para ejecutar el netcat, ejecute: nc -l -p 13

ventanas? sin netcat? instalar cygwin, y añadir netcat

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top