- PR -

配列要素の移動について(Winsock)

1
投稿者投稿内容
freebird
常連さん
会議室デビュー日: 2006/11/07
投稿数: 22
投稿日時: 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);
freebird
常連さん
会議室デビュー日: 2006/11/07
投稿数: 22
投稿日時: 2006-12-06 17:14
こんばんわ。
申し訳ありません。
解決致しました。

今後ともよろしくお願い致します。
ぽぴ王子
ぬし
会議室デビュー日: 2006/03/24
投稿数: 475
お住まい・勤務地: お住まい:城・勤務地:城
投稿日時: 2006-12-06 17:16
まずは環境を書きましょう。
過去の投稿からVC++.NET2003というのが発見できたのでManaged C++なの
だと思いますが、よほど心優しい科学の子でなければそこまで調べて推測したりはしませ
ん。
(ソースコードを読む限りはむしろ純粋なCっぽい感じですが)

引用:

しかし、受信側の動画データを開くと動画を見ることは可能ですが、画像が荒っぽくなっています。パケットによるロスはありません。

私は、このmemmove関数による配列要素の移動?の部分が怪しいと思っていますが・・・解決できていません。


私としては、まずは問題点の切り分けをすべきかな?と感じます。
本当にパケットロスは無かったのか?画像が荒っぽくなるというのはどのような感じなのか
(抽象的な言葉だけでは伝わりません)?そもそも送信に使用したファイルと受信側が
作成したファイルはバイナリレベルで一致するのか?などなど。

他にもいろいろ突っ込まないといけないところがありそうな気がしますが、それはC++の
偉い人に任せたいと思います(こら)。

とりあえず、送信側のファイルと受信側のファイルが同一かどうか調べてみてください。
(テスト用に動画ファイルではなくテキストファイルを送ってみるのもいいと思います)

# って、書いてきたら解決してたのですか…はぁ。
_________________
ぽぴ王子@わんくま同盟
ぽぴ王子の人生プログラミング中 / ぽぴンち。
甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2006-12-06 17:28
引用:

freebirdさんの書き込み (2006-12-06 17:14) より:
こんばんわ。
申し訳ありません。
解決致しました。


だろうね・・・
こんなバグ見逃すほうがどうかしているし。
コード:
    c = sprintf(SBuf,"NUMBER\\\\\\\\0",Num); 
    memmove(&SBuf[c+1],&Buf[0],size); 



_________________
甕星 <mikahosi@abox9.so-net.ne.jp>
http://blogs.msmvp.jp/mikahosi/
freebird
常連さん
会議室デビュー日: 2006/11/07
投稿数: 22
投稿日時: 2006-12-06 17:30
引用:

ぽぴ王子さんの書き込み (2006-12-06 17:16) より:
まずは環境を書きましょう。

私としては、まずは問題点の切り分けをすべきかな?と感じます。
本当にパケットロスは無かったのか?画像が荒っぽくなるというのはどのような感じなのか
(抽象的な言葉だけでは伝わりません)?そもそも送信に使用したファイルと受信側が
作成したファイルはバイナリレベルで一致するのか?などなど。



こんばんわ。
申し訳ありません。一応ですが・・・解決しました。
詳細な内容のご提示ありがとうございます。

テキストファイルの送信←これは思いつきませんでした。今後参考にさせていただきます。

sprintf関数や送信側と受信側でrecvfromやsendtoなどの返り値から、エクセルを用いて自分なりにさぐってみたところ・・・

送信側で1バイト、送信できていないことに気づきました。

ありがとうございました。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2006-12-06 22:23
引用:

ぽぴ王子さんの書き込み (2006-12-06 17:16) より:

# って、書いてきたら解決してたのですか…はぁ。



同じく(-_-;
freebird
常連さん
会議室デビュー日: 2006/11/07
投稿数: 22
投稿日時: 2006-12-08 11:22
甕星さん、jittaさん
返信ありがとうございます。

一応ですが、解決しました。
今後ともよろしくお願い致します。
1

スキルアップ/キャリアアップ(JOB@IT)