2009-02-15 13 views
15

Estoy comenzando Boost.Asio y trato de dar ejemplos en el sitio web oficial.
aquí `código de cliente:No puedo entender realmente cuáles son los parámetros para construir tcp :: resolver :: query


using boost::asio::ip::tcp; 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    try { 
     boost::asio::io_service io_service; 

     tcp::resolver resolver(io_service); 
     tcp::resolver::query query(argv[1], "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); 
     } 
     if (error) 
      throw boost::system::system_error(error); 

     for(;;) { 
      boost::array buf; 
      boost::system::error_code error; 

      std::size_t len = socket.read_some(boost::asio::buffer(buf), error); 

      if (error == boost::asio::error::eof) 
       break; //connection closed cleanly by peer 
      else if (error) 
       throw boost::system::system_error(error); 

      std::cout.write(buf.data(), len); 
     } 
    } 
    catch(std::exception& e) { 
     //... 
    } 
    return 0; 
} 

La pregunta es - no puedo averiguar cuáles serían los parámetros para ejecutar el programa de línea de comandos?

Respuesta

12

Se podría ejecutar el programa con la dirección IP o nombre de host del servidor al que desea conectarse. tcp :: resolver :: query lleva al host a resolver o la IP como primer parámetro y el nombre del servicio (como se define, por ejemplo, en/etc/services en hosts Unix) - también puede usar un identificador de servicio numérico (también conocido como puerto número). Devuelve una lista de puntos finales posibles, ya que puede haber varias entradas para un solo host.

+1

consulta TCP :: :: resolvedor de consulta ("localhost", "día"); // funciona // quería probar el ejemplo en localhost – chester89

1

Si no me equivoco, está tratando de usar UNICODE string - tchar. Utiliza estándar

int main(int argc,char **argv) 
2

Tuve el mismo problema en este momento (con el mismo tutorial). Cambiar el código de servidor para:

tcp::acceptor acceptor(io_service, tcp::endpoint(tcp::v4(), 19876)); 

y cambiar el código de cliente:

tcp::resolver::query query(argv[1], "19876"); 

para hacer el mismo trabajo de servicio en un puerto diferente.

Cuestiones relacionadas