これは質問よりも確認のためのリクエストです。 (私は自分のPCから離れているので、このソリューションを実装してテストすることはできません)。C++ソケットバッファーサイズ
私は、webcam(メタデータと共に)で撮影した画像ファイルをraspberryPiから私のPCに送るプログラムを書いています。
私は、イメージは約130kb、パケットヘッダーは12b、それに関連するメタデータは24bです。私は将来像のサイズを増やすことができますが、いったん動作するプロトタイプがあれば。
現在のところ、私はこの完全なパケットを正常に取り出すことができません.PCに送信した後、バッファ内に約64kbのrecv'dしか取得できません。
SOCKET sock = socket(PF_INET, SOCK_STREAM, 0);
が64キロバイトである(あなたが「知っている中で」なら、誰かがこれを明確にできてください)
:私はこれが原因でソケットのデフォルトのバッファサイズは次のように宣言した何らかの理由であると仮定しています
この問題を解決するために、setsockopt(x ..)コマンドを使用してソケットサイズを1024kbに増やしたいと考えています。
私の問題の診断と提案された解決策が正しいことを誰かが確認できますか?
私は今すぐ自分のPCを形成しているので、家に帰るまで試してみることができません。
もう一つの選択肢は、私が精神的にプライミングしているのは、手動でパケットをセグメント化することです。しかし、これは、エラーの可能性がはるかに高くなり、各セグメントごとにヘッダーを送信して読み取る必要があるため、全体的なパケットサイズ/計算時間が増えると思われます。 –
すべてのデータを受け取っていないのは、 'recv()'がループする代わりにあなたのバッファを埋めると仮定しているということです。その前提を裏付けるものはドキュメントには何もありません。 – EJP
返信ありがとう、私はあなたに従うことを確信していないが、明確にする:私はそれがヘッダーに格納され、これが抽出され、読み取り、残りの部分を受け取るために割り当てられた適切なサイズのバッファですデータ。 だから、これ以上の説明で: >>は、データパケットのサイズ で、ヘッダを取得し、正しいサイズ のバッファを作成します>バッファを満たすと作るために実行したrecvはバイトのノートが を受けた>チェックバイトは、ヘッダのデータサイズに対して受信しました –