Я хочу сделать асинхронный 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.
В чем может быть проблема в этом клиенте?