2011-10-26 4 views
4

"\ n"で終わる受信テキストを処理するためにboost :: asioを使ってtcpクライアントを開発しています。しかし、空白を含むテキストを送信すると、最初の空白が現れた後にすべての文字が削除されます。私はすでに送信しているテキストが完全であることを確認しました。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を使用してコンテンツ全体を取得できます。

関連する問題