Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么数据不能传输_C++_Boost Asio - Fatal编程技术网

C++ 为什么数据不能传输

C++ 为什么数据不能传输,c++,boost-asio,C++,Boost Asio,我试图设计一个客户机-服务器程序,其中双方{server,client}都可以与async_connect通信。 这是我的服务器程序代码: std::string GetMessage() { std::string user("User"); user += client; client++; return user; } class TcpConnection : public boost::enable_shared_from_this&

我试图设计一个客户机-服务器程序,其中双方{server,client}都可以与async_connect通信。 这是我的服务器程序代码:

std::string GetMessage()
{
    std::string user("User");
    user += client;
    client++;
    return user;

}

class TcpConnection
        : public boost::enable_shared_from_this<TcpConnection>
{
private:
    boost::asio::ip::tcp::socket socket1;
    std::string message;


    TcpConnection(boost::asio::io_service &io_service) :
            socket1(io_service)
    {
    }

    void Writehandler(const boost::system::error_code &errorCode, size_t size)
    {
        if (!errorCode)
        {
            Read();
        }
        std::cout << errorCode.message() << std::endl;
    }

public:
    typedef boost::shared_ptr<TcpConnection> pointer;

    static pointer Create(boost::asio::io_service &io_service)
    {
        return pointer(new TcpConnection(io_service));
    }

    boost::asio::ip::tcp::socket &socket()
    {
        return socket1;
    }

    void Start()
    {
        message = GetMessage();
        boost::asio::async_write(socket(), boost::asio::buffer(message),
                                 boost::bind(&TcpConnection::Writehandler, shared_from_this(),
                                             boost::asio::placeholders::error,
                                             boost::asio::placeholders::bytes_transferred));
    }

    void Read()
    {
        std::array<char, 65> messages{};
        auto self(shared_from_this());
        boost::asio::async_read(socket(),
                                boost::asio::buffer(messages),
                                [this, self](boost::system::error_code ec, std::size_t /*length*/) {
                                    if (!ec) {
                                        Read();
                                    } else {
                                       std::cout << ec.message() << std::endl;
                                        exit(1);
                                    }
                                });
    }

};

class Server
{
private:
    boost::asio::ip::tcp::acceptor acceptor;


public:
    Server(boost::asio::io_service &io_service, unsigned short int port)
            :
            acceptor(io_service, boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(), port))
    {
        startAccept();
    }

    void startAccept()
    {
        TcpConnection::pointer newConnection = TcpConnection::Create(acceptor.get_io_service());
        acceptor.async_accept(newConnection->socket(),
                              boost::bind(&Server::Handler, this, newConnection, boost::asio::placeholders::error
                              ));
    }

    void Handler(TcpConnection::pointer &newConnection, const boost::system::error_code &errorCode)
    {
        if (!errorCode)
            newConnection->Start();
        startAccept();
    }
};
std::string GetMessage()
{
std::字符串用户(“用户”);
用户+=客户端;
客户端++;
返回用户;
}
类TCP连接
:public boost::从\u启用\u共享\u
{
私人:
boost::asio::ip::tcp::socketsocket1;
std::字符串消息;
TCP连接(boost::asio::io_服务和io_服务):
插座1(io_服务)
{
}
void Writehandler(const boost::system::error\u code&errorCode,size\u t size)
{
如果(!错误代码)
{
Read();
}

std::cout在
客户机::启动
功能中,您从未实际连接到任何远程服务器。您只解析远程合作伙伴的地址

或者可能是你想要的

void start()
{
    try
    {
        boost::asio::ip::tcp::resolver resolver(socket1.get_io_service());
        boost::asio::ip::tcp::resolver::query query(boost::asio::ip::tcp::v4(), port);
        boost::asio::ip::tcp::resolver::iterator endpoint = resolver.resolve(query);
        boost::asio::connect(socket(), endpoint); //<--- Connect to your server

        std::cout << exception.what() << std::endl;
    }
    catch (const std::exception &e)
    {
        //Handle
    }
    catch (const boost::system::system_error &e)
    {
        //Handle
    }
}
void start()
{
尝试
{
boost::asio::ip::tcp::解析器解析器(socket1.get_io_service());
boost::asio::ip::tcp::resolver::query查询(boost::asio::ip::tcp::v4(),端口);
boost::asio::ip::tcp::resolver::iterator endpoint=resolver.resolve(查询);

boost::asio::connect(socket(),endpoint);//
代码没有错误。
您实际在哪里使用或?
void start()
{
    try
    {
        boost::asio::ip::tcp::resolver resolver(socket1.get_io_service());
        boost::asio::ip::tcp::resolver::query query(boost::asio::ip::tcp::v4(), port);
        boost::asio::ip::tcp::resolver::iterator endpoint = resolver.resolve(query);
        boost::asio::connect(socket(), endpoint); //<--- Connect to your server

        std::cout << exception.what() << std::endl;
    }
    catch (const std::exception &e)
    {
        //Handle
    }
    catch (const boost::system::system_error &e)
    {
        //Handle
    }
}