boost :: asio :: streambufを使用して、boostをostreamに書き込んでいます。boost :: asio :: streambuf empty?
Name name;
name.set_name("platzhirsch");
boost::asio::streambuf b;
std::ostream os(&b);
ZeroCopyOutputStream *raw_output = new OstreamOutputStream(&os);
CodedOutputStream *coded_output = new CodedOutputStream(raw_output);
coded_output->WriteVarint32(name.ByteSize());
name.SerializeToCodedStream(coded_output);
socket.send(b.data());
ただし、sendによって返されるsize_tは0です。データがまったく送信されないことは疑いがあります。また、クライアントソケットは恐ろしい例外をスローします。私のコードについて奇妙なことがあるかどうか、私は尋ねています。
つまり、streambufが空であるかどうか、またはそれに書き込まれたデータが実際に存在するかどうかをテストできますか?
あなたが動的にストリームを割り当てる必要はありませんが、代わりにスタックオブジェクトの寿命を制御するためにブロックを使用することができます。完全な回答については、http://stackoverflow.com/a/20397980/891439を参照してください。ソリューションを見つけるためにGoogleに多くのことをしなければならなかったので、私は完全性のためにこのコメントを追加しました。 –
@FlorianWoltersあなた自身の答えを自由に追加してください。私は別の答えを受け入れてうれしく思います。 –
私はコメントが十分だと思うが、タイ! –