私は、C++でクライアントを一緒にハックしようとしていますが、Googleのプロトコルバッファとboost :: asioを使用しています。boost :: asioでメッセージを送信する
私の問題は、protobufメッセージをどのようにしてasioに送ることができないのかということです。 私が持っていることはこれです:
// set up *sock - works
PlayerInfo info;
info.set_name(name);
// other stuff
は今、私は以下のが間違っていることを知っているが、私はとにかくそれを投稿します:
size_t request_length = info.ByteSize();
boost::asio::write(*sock, boost::asio::buffer(info, request_length));
私は限り私は私が持っていることを知っているようです私のメッセージをバッファに別々にまとめる - しかしどうしたの?
一般的に言えば、私はboost :: asioがどのように動作するかを理解するのに苦労しています。いくつかのチュートリアルがありますが、通常はintsのような標準のデータ形式を送信するだけで、すぐに使用できます。私は私の問題はシリアライズであることを考え出したが、一方で私はいるProtobufが私のためにこれを行う必要があります...そして今私は混乱していることを知りました;)あなたの助けを
ありがとう!
- > Daniel Gehrigerがソリューションを提供しました。ありがとうございました!
もう一方の端のPlayerInfoオブジェクトを確実に読み取れるように、ストリームにさらに情報を追加する必要があります。 Protobufはオブジェクト型をストリームに直接埋め込むことはありません。私はそれも長さが含まれているとは思わないが、私はドキュメントを確認する必要があります。ところで、ASIOはオブジェクトについて知りません。それはバイトを扱うだけです。例とドキュメントを読むときは、それを覚えておいてください。 – Dan
Daniel Gehriger:ありがとうございました!それはうまくいった! – adi64
Dan:うん、私は、サーバーがそれを読むことができるようにサイズをあらかじめ追加しなければならないと思った...ありがとう! – adi64