Async read для tcp server распечатывает данные, отправленные сокетом клиента с помощью boost :: asio - PullRequest
0 голосов
/ 26 сентября 2018

Я хочу напечатать сообщение, отправленное клиентом.Но в моей функции 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 голосов
/ 26 сентября 2018

async_read не печатает сообщение, пока размер буфера не заполнится!

0 голосов
/ 26 сентября 2018

Какой тип m_buffer?Если это контейнер, вы должны изменить его размер заранее.Если это asio::streambuf, вам нужно, по крайней мере, использовать параметр bytes_transferred, полученный handleRead.

. Есть много примеров эха, поэтому позвольте мне указать вам несколько:

...