如何在到达终止字符时返回 boost::asio::async_read

Posted

技术标签:

【中文标题】如何在到达终止字符时返回 boost::asio::async_read【英文标题】:How to get the boost::asio::async_read to return when the terminating character is reached 【发布时间】:2011-03-18 10:30:45 【问题描述】:

我正在使用 boost asio 库从 tcp 套接字读取内容。我的代码是这样的

std::string completeBuffer="";
std::string TcpConnection::readMessage()

    LOG4CPLUS_DEBUG(logger, "Start Listener for Reading Message from Connection");
    boost::system::error_code error;
    boost::asio::async_read(socket, boost::asio::buffer(buffer),
        boost::bind(&TcpConnection::handleRead, this, buffer, boost::asio::placeholders::error));
    return buffer.data();


void TcpConnection::handleRead(boost::array<char, TcpConnection::BUFFER_SIZE> buf, const boost::system::error_code& error)

    if(!error)
    
       LOG4CPLUS_INFO(logger, "READ Message " << buf.data());
       completeBuffer.append(buf.data());
       buf.assign(0);
       readMessage();
    


现在我正在从其他班级拨打readMessage() 的电话。每当到达BUFFER_SIZE 时,就会调用handleRead 并附加内容。

现在的问题是 BUFFER_SIZE 是 50,整个消息大小是 75,handleRead 只调用一次,缓冲区等待填充 handleRead 第二次调用。 有没有办法设置 asio 到达时返回的 EOM 字符或字符串。

【问题讨论】:

【参考方案1】:

找到答案async_read_until

【讨论】:

以上是关于如何在到达终止字符时返回 boost::asio::async_read的主要内容,如果未能解决你的问题,请参考以下文章

优雅地终止基于 Boost Asio 的 Windows 控制台应用程序

Boost asio - 从标准输入异步读取已建立的字符数

传递给 boost::asio::async_read_some 的回调从未在 boost::asio::read_some 返回数据的使用中调用

如何使用 boost::asio 将 URL 转换为 IP 地址?

c++ - Boost ASIO 网络服务器/客户端

Boost::Asio 的 IOCP CompletionKey?