Вопрос

Я пытаюсь асинхронно Установите хост FTP с помощью boost.asio.

Вот что я пробовал до сих пор:

#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;
}

Но по какой -то причине, когда я его выполняю, это просто ничего не печатает:

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$

Нет ошибок или предупреждений в сборнике, хотя.

Как я могу это исправить?

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

Решение

Вам нужно позвонить io_service.run() чтобы действительно выполнить работу. Подумайте о async_resolve в качестве запроса в очереди запроса - вам что -то нужно ( io_service) для обработки запросов в очереди, и для этого вам действительно нужно run() Это! В этом случае он увидит один запрос, выполните его, вызовите обработчик, а затем выйдет.

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

Ваш io_service а также ip::tcp::resolver Объект выходит из области. Перемещать их обоих в членов FtpSession класс, затем призвать io_service::run внутри главного после session.Connect(host) Чтобы начать петлю события.

Я ответил Подобный вопрос Несколько дней назад это может помочь вам.

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