2011-10-26 47 views
4

我正在開發一個使用boost :: asio來處理傳入文本的tcp客戶端,該文本以「\ n」結尾。但是,當我發送包含空格的文本時,會在第一個空白出現後刪除所有字符。我已經驗證過我發送的文本是完整的。boost:read_until「 n」讀取直到「」

這是我的代碼:

boost::system::error_code error; 
boost::asio::streambuf buffer; 
boost::asio::read_until(*socket, buffer, "\n", error); 
std::istream str(&buffer); 
std::string s; 
str >> s; 
+4

它是抓取緩衝區中第一個單詞的''',而不是提升丟棄文本 – nos

回答

11

使用std::getline代替>>,這是停止在遇到空格閱讀:

std::istream str(&buffer); 
std::string s; 
std::getline(str, s); 
3
std::istream str(&buffer); 
std::string s; 
str >> s; 

如果這是你如何檢查內容的緩衝區,那麼你錯了。這將從字符串中讀取std::string,該字符串可讀取第一個空格字符。這就是std::string operator<<所做的。如果你繼續做>> s,你會得到你的其他信息。相反,您可以使用std::getline來檢索整個內容。