如果服务器未运行,则async_connect成功

async_connect successfull if server is not running

本文关键字:async connect 成功 服务器 运行 如果      更新时间:2023-10-16

我正在尝试检查boost::asio::async_connect是否成功,但是即使服务器不是启动的,也没有收到错误。如何正确检查成功?谢谢!

main.cpp

#include <boost/asio.hpp>
#include "tcp_client.h"
typedef boost::asio::ip::tcp tcp;
int main(int argc, char* argv[])
{
    char host[16] = "127.0.0.1";
        boost::asio::io_service io_service;
        TCP_Client client(host, io_service);
        io_service.run();
    return 0;
}

tcp_client.h

#pragma once
#include <boost/asio.hpp>
#include <boost/bind.hpp>
#include <iostream>
typedef boost::asio::ip::tcp tcp;
class TCP_Client
{
public:
    TCP_Client(std::string newHost, boost::asio::io_service& io_service);
private:
    void handle_connect(const boost::system::error_code& error);
    boost::asio::ip::tcp::socket socket;
    boost::asio::ip::tcp::acceptor acceptor;
};

tcp_client.cpp

#include "tcp_client.h"
TCP_Client::TCP_Client(std::string host, boost::asio::io_service& io_service)
    : socket(io_service), acceptor(io_service, boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(), 12121))
{
    tcp::resolver resolver(socket.get_io_service());
    tcp::resolver::query query(host, "12121");
    tcp::resolver::iterator endpoint_iterator = resolver.resolve(query);
    boost::asio::async_connect(socket, endpoint_iterator, boost::bind(&TCP_Client::handle_connect, this, boost::asio::placeholders::error));
}
void TCP_Client::handle_connect(const boost::system::error_code& error)
{
    if (!error && socket.is_open())
    {
        std::cout << "Connected" << std::endl;
    }
    else
    {
        std::cout << "Error handle connect:" << error << std::endl;
    }
    int a;
    std::cin >> a;
}

您有一个绑定到端口的接受器:

... acceptor(io_service, boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(), 12121)) ...

所以你正在与自己联系。您的客户端不需要也不应该有 TCP 接受器,除非它应该接受 TCP 连接。