2017-05-11 7 views
0

Ich versuche zu überprüfen, ob boost::asio::async_connect erfolgreich war, aber ich bekomme keinen Fehler, auch wenn der Server nicht gestartet ist. Wie überprüfe ich den Erfolg richtig? Vielen Dank!async_connect erfolgreich, wenn Server nicht läuft

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; 
} 
+0

Was passiert? –

+0

Es wird nur "Verbunden" ausgedruckt. – honiahaka10

+1

Ihr Code sieht richtig aus. Sind Sie 100% sicher, dass es nicht verbunden ist? Was sagt "Netstat"? –

Antwort

3

Sie haben einen Akzeptor an den Port gebunden:

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

Sie verbinden sich also mit sich selbst. Ihr Client benötigt keinen TCP-Akzeptor und sollte dies auch nicht tun, es sei denn, er soll TCP-Verbindungen akzeptieren.

Verwandte Themen