- - PR -
配列要素の移動について(Winsock)
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-12-06 16:40
こんにちは。
配列要素の移動について質問します。 [実行内容] 送信側から受信側へ動画データを送信しています。その際、送信側にて「NUMBER」という文字列を先頭アドレスから付加し、そしてmemmove関数より「NUMBER」の後ろにバイナリデータを連結し、受信側へ送信します。 受信側にてrecvfrom関数にてパケットを受信し、memmove関数にて要素[8]からうしろ1024バイト分のバイナリデータを先頭要素へ1024バイト分移動させ、fwrite関数で書き込みを行なっています。 しかし、受信側の動画データを開くと動画を見ることは可能ですが、画像が荒っぽくなっています。パケットによるロスはありません。 私は、このmemmove関数による配列要素の移動?の部分が怪しいと思っていますが・・・解決できていません。 どうかご教授ください。 よろしくお願い致します。 [送信側] int size,Num; char Buf[1500],SBuf[1500]; while((size = fread(Buf, sizeof(char), 1024, fp)) != 0) { c = sprintf(SBuf,"NUMBER\\\\0",Num); memmove(&SBuf[c+1],&Buf[0],size); sendto(); } [受信側] char RBuf[1500] recvfrom(RBuf,・・・・); //データが格納されているRBuf[8]から1024バイト分移動 memmove(&RBuf[0],&RBuf[8],1024); fwrite(RBuf,1024,1,fp); | ||||||||
|
投稿日時: 2006-12-06 17:14
こんばんわ。
申し訳ありません。 解決致しました。 今後ともよろしくお願い致します。 | ||||||||
|
投稿日時: 2006-12-06 17:16
まずは環境を書きましょう。
過去の投稿からVC++.NET2003というのが発見できたのでManaged C++なの だと思いますが、よほど心優しい科学の子でなければそこまで調べて推測したりはしませ ん。 (ソースコードを読む限りはむしろ純粋なCっぽい感じですが)
私としては、まずは問題点の切り分けをすべきかな?と感じます。 本当にパケットロスは無かったのか?画像が荒っぽくなるというのはどのような感じなのか (抽象的な言葉だけでは伝わりません)?そもそも送信に使用したファイルと受信側が 作成したファイルはバイナリレベルで一致するのか?などなど。 他にもいろいろ突っ込まないといけないところがありそうな気がしますが、それはC++の 偉い人に任せたいと思います(こら)。 とりあえず、送信側のファイルと受信側のファイルが同一かどうか調べてみてください。 (テスト用に動画ファイルではなくテキストファイルを送ってみるのもいいと思います) # って、書いてきたら解決してたのですか…はぁ。 _________________ ぽぴ王子@わんくま同盟 ぽぴ王子の人生プログラミング中 / ぽぴンち。 | ||||||||
|
投稿日時: 2006-12-06 17:28
だろうね・・・ こんなバグ見逃すほうがどうかしているし。
_________________ 甕星 <mikahosi@abox9.so-net.ne.jp> http://blogs.msmvp.jp/mikahosi/ | ||||||||
|
投稿日時: 2006-12-06 17:30
こんばんわ。 申し訳ありません。一応ですが・・・解決しました。 詳細な内容のご提示ありがとうございます。 テキストファイルの送信←これは思いつきませんでした。今後参考にさせていただきます。 sprintf関数や送信側と受信側でrecvfromやsendtoなどの返り値から、エクセルを用いて自分なりにさぐってみたところ・・・ 送信側で1バイト、送信できていないことに気づきました。 ありがとうございました。 | ||||||||
|
投稿日時: 2006-12-06 22:23
同じく(-_-; | ||||||||
|
投稿日時: 2006-12-08 11:22
甕星さん、jittaさん
返信ありがとうございます。 一応ですが、解決しました。 今後ともよろしくお願い致します。 |
1