0
残念ながらthisは、私が実装されるような例外をスローするソフトウェアを持っていますが、私はそれを避ける方法を知っておく必要があります...istringstream演算子>>戻り値
有用ではなかったです。具体的な部分は次のとおりです。
if (!(iss >> c)) {
throw std::runtime_error(
"No return code: status line doesn't begin with return code");
}
これはすべての方法です。
void parseReply(std::ostream& os, std::istream& is, std::string &strReturn) {
std::string s;
int c;
while (std::getline(is, s)) {
strReturn += s;
strReturn += '\n';
std::istringstream iss(s);
if (!(iss >> c)) {
throw std::runtime_error(
"No return code: status line doesn't begin with return code");
}
if (CODE_OK == c
|| CODE_ERROR == c
|| CODE_BUSSY == c
|| CODE_UNKNOWN_CMD == c
) {
break;
}
}
if (CODE_OK != c
&& CODE_UNKNOWN_CMD != c
&& CODE_BUSSY != c
) {
throw std::runtime_error("error: " + s);
}
while (is >> s) {
flyelite::util::chop(s);
strReturn += s;
if (">" == s) {
return;
}
}
return;
このメソッドは、tcpメッセージの回答のデータ内容を解析します。各メッセージは ">"文字で確認応答されます。問題は時々(主に大量のメッセージがループしているとき)iss
の内容があることを、今ある
:
「> 250よしは」
正しいフォーマットう
こと"250よし"
- なぜ
(iss >> c)
返信false
最初の内容がiss
の場合は ">"ですか? - 送信者が返信で2番目の「>」を返す可能性はありますか?
ISSの最初の内容は ">" であるとき、事前に感謝
おかげ@Curiousに見ていること、ので(理由は上記の理由で)あなたが読むことができなかったことを、入力ストリームからの値の上に残されそうですoperator >>は 'target'型に敏感です... nice –