Построить асинхронный TCP-клиент с надстройкой - PullRequest
0 голосов
/ 26 июня 2018

Я хочу сделать асинхронный TCP-клиент, используя boost :: asio. Мне нужно поддерживать методы:

SendData(char* buffer, int size);
GetData(char* buffer); 

для отправки и получения данных с / на хост.

Проблема в том, что когда я использую async_connect - обработчик не вызывается, даже сервер работает (предположим, я использую сервер повышения обучения: https://www.boost.org/doc/libs/1_54_0/doc/html/boost_asio/tutorial/tutdaytime3.html)

Код клиента:

class TCPCommunication {
private:
    std::string m_host;
    std::shared_ptr<tcp::socket> m_socket;
    bool m_initialized = false;

public:
    TCPCommunication(const std::string& host) : m_host(host) {
        if (!Init()) {
            exit(1);
        }
    }
    ~TCPCommunication() = default;

    void handle_connect(const boost::system::error_code& error) {
        // this code is not reached!!!!!!!!!
        m_initialized = true;
        std::cout << __func__ << std::endl;
    }

    bool Init() {
        try {
            boost::asio::io_service io_service;

            tcp::resolver resolver(io_service);
            tcp::resolver::query query(m_host, "daytime");
            tcp::resolver::iterator endpoint_iterator = resolver.resolve(query);

            m_socket = std::make_shared<tcp::socket>(io_service);
            boost::system::error_code error = boost::asio::error::host_not_found;
            boost::asio::async_connect(*m_socket, endpoint_iterator, boost::bind(&TCPCommunication::handle_connect, this,
                                                boost::asio::placeholders::error));

            return true;
        }
        catch (std::exception& e) {
            std::cerr << e.what() << std::endl;
        }
        return false;
    }

    int SendData(const char* buffer, int sizeOfData);
    void GetData(char* buffer);
};

Так что я не могу использовать методы GetData и SendData.

В чем может быть проблема в этом клиенте?

...