如何在到达终止字符时返回 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::async_read_some 的回调从未在 boost::asio::read_some 返回数据的使用中调用