我正在使用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字符或字符串,以便在到达时返回。