2011-03-18 75 views
0

我使用boost asio庫從tcp套接字讀取內容。我的代碼看起來像這樣如何獲得boost :: asio :: async_read當到達終止字符時返回

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被稱爲第二次。 有沒有辦法設置EOM字符或字符串asio每當它到達時返回。

回答

5

找到了答案async_read_until

+0

+1,這是正確的。 – Ralf 2011-03-18 11:38:01

+0

+1另一個upvote – 2011-03-18 14:09:26

相關問題