私は自分のprotobuf-messageを設定しているようですが、他のすべてのフィールドはネットワーク上で正しく送信され、切り捨てられません。私は、画像やファイルのバイナリデータを読み込んで、それをバイト配列型としてGoogleのprotobufを介して送信すると、配列の最初の4つの要素しか含まないという問題が1つしかありません。画像が200kbと言うと、もう一方の端では1kb(基本的にヘッダーまたは識別子のみが含まれています)として表示されます。この問題はちょっと複雑なので、私は逃げようとします。私はこれを理解することが不可能になる場合は申し訳ありません。私はこれについて完全に間違った方向に行くかもしれない。Googleを介してバイナリファイルデータを送信するProtobuf
以下の例は、概念的な作業を含み、クラスで書かれています。それは小さな誤差を含んでいる可能性が非常に高いです。コードは自宅でコンパイルされますが、それがタイプミスであれば教えてください。修正することができます。
FILE* file; FILE* ofile; file = fopen("red.png", "rb"); fseek(file, 0, SEEK_END); long fSize = ftell(file); rewind(file); BYTE* ret = new BYTE[fSize]; fread(ret, 1, fSize, file); fclose(file); char dataStream[1024] //yes it is large enough myPacket.set_file(ret); //set other fields here myPacket.SerializeToArray(dataStream,sizeof(dataStream)); //send through sockets below, works for all but file field.
私は私のメインの仕事用のコンピュータに戻って家に帰るとき、私はそれ以上を含むことができ、申し訳ありませんが、ちょうど私がクラスでこのシチューながらしてみましょう可能性が期待していました。これで十分ではない情報が私に叩くことを自由に感じたら、それはちょうど助言を探しているだけです。私はまた、特定の画像フォーマットは、特定の方法を読み取ることができることを知っているが、が、私は私の擬似帳みんなを読むためだけではないいるProtobuf上、
感謝をPNGをコピーして、ローカルバイナリを通してそれを書き換えることができた、Iついに私の知識を向上させるために飛躍しようとしています。
(ret)にすばやくタイプされたポインタエラー(& ret)が編集されました。また、サイズはsizeof(myPacket)にする必要があります。
'ret'、あなたの画像データへのポインタ、および'&ret'、あなたの変数へのポインタの違いを考えてみましょう。そして、 'sizeof(dataStream)'は1024です。 – molbdnilo
s/'myPacket.set_file(&ret);'/'myPacket.set_file(ret);' – user0042
ポインタ部分が誤っていたので、サイズが問題です。 – Wilky