TCP服务器的异步读取将通过boost :: asio打印客户端套接字发送的数据

时间:2018-09-26 12:28:22

标签: c++ asynchronous tcp server boost-asio

我要打印客户端发送的消息。但是在我的handleRead函数中,当从缓冲区获取数据并打印时,什么也没打印。我不知道该怎么做。

void    Network::start()
{
    boost::asio::async_write(m_socket, boost::asio::buffer(m_message),
                             boost::bind(&Network::handleWrite,shared_from_this(),
                                         boost::asio::placeholders::error));
}

void    Network::handleWrite(const boost::system::error_code &error)
{
    if (!error)
            doRead();
    else
            std::cout << error.message() << std::endl;
}

void    Network::handleRead(const boost::system::error_code &error)
    {
    if (!error) {
            std::cout << m_buffer.data()<< std::endl;
            doRead();
    }
    else
            close();
}

void    Network::doRead()
{
    boost::asio::async_read(m_socket,
                            boost::asio::buffer(m_buffer),
                            boost::bind(&Network::handleRead,
                                        shared_from_this(),
                                        boost::asio::placeholders::error));
}

2 个答案:

答案 0 :(得分:0)

m_buffer是什么类型?如果是容器,则必须提前调整大小。如果是asio::streambuf,则至少需要使用bytes_transferred改成handleRead的参数。

有很多回声示例,所以让我指出一些:

答案 1 :(得分:0)

直到缓冲区的空间已满,async_read才会输出消息!