Pregunta

Estoy tratando de asíncrona resolver un servidor FTP usando Boost.Asio.

Esto es lo que he probado hasta ahora:

#include <iostream>
#include <string>

#include <boost/asio.hpp>
#include <boost/bind.hpp>

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

class FtpSession {
public:
    void Connect(std::string& host) {
        boost::asio::io_service io_service;

        tcp::resolver resolver(io_service);
        tcp::resolver::query query(host, "ftp");

        resolver.async_resolve(query,
            boost::bind(&FtpSession::OnResolve, this, 
                boost::asio::placeholders::error, 
                    boost::asio::placeholders::iterator));
    }

private:
    void OnResolve(const boost::system::error_code& err, tcp::resolver::iterator endpoint_iterator) {
        if (!err)
        {
            std::cout << "resolved!";
        }
        else
        {
            std::cout << "error.";
        }
    }
};

int main() {
    FtpSession session;
    std::string host("ftp.remotesensing.org");

    session.Connect(host);

    return 0;
}

Sin embargo, por alguna razón, cuando yo haga él, simplemente no se imprime nada:

alon@alon-GA-73PVM-S2H:~/Desktop$ g++ -o test -lboost_system test.cc
alon@alon-GA-73PVM-S2H:~/Desktop$ ./test
alon@alon-GA-73PVM-S2H:~/Desktop$

No hay errores o advertencias en la compilación sin embargo.

¿Cómo puedo solucionar este problema?

¿Fue útil?

Solución

Debe io_service.run() llamada a hacer realidad los me parece trabajo. Piensa en la async_resolve como una solicitud en una cola de peticiones - que necesita algo (el io_service) para procesar las peticiones en la cola, y para hacer eso, usted necesita realmente run() él! En este caso, se verá una petición, ejecutarlo, llamar al manejador y luego salir.

Otros consejos

Su io_service y el objeto ip::tcp::resolver se va fuera de alcance. Mover a ambos en los miembros de la clase FtpSession y luego invoque el interior de io_service::run principal después session.Connect(host) para iniciar el ciclo de eventos.

Me respondió una pregunta similar hace unos días que pueden ayudar también .

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