掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
転送エラー (ID:58498)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
現在、VC++.net、winsock2.0をつかって、コンソール上で動く、バイナリファイルを転送するプログラムを作成しています。 サーバ側(ファイルを送るほう)とクライアント(受け取るほう)をつくって、クライアントが接続するIPを127.0.0.1で実験してみると、うまくファイルを転送することができました。ですが、ほかの人のPCと接続してみると(IPはかえています)、接続はできて、チャットのように文字の送受信はできるのですが、ファイルの転送がうまくできません。うまくできないというのは、30kバイトぐらいのjpgを転送するのは成功したのですが、1Mをこえるbmpを転送すると、相手(クライアント)のPCからエラー音がでて、プロンプト上におそらく画像の内容をしめしているかのような、文字がでます。 プログラムは、ファイル情報をいれたヘッダーを先に送信してその後に、中身をおくるようにしています。ファイルのサイズが1M以上の場合、1Mずつ配列にいれていくようにしています。 これが、サーバ側のプログラムです。 while(header2.fsize>0){ if(header2.fsize<=1000000){ res=fread(data,sizeof(char),header2.fsize,fp2); send(c,(char *)&data,header2.fsize,0); if(res==SOCKET_ERROR) error("ファイル送るエラー2\n"); break; } else{ fread(data,sizeof(char),1000000,fp2); res=send(c,(char *)&data,1000000,0); if(res==SOCKET_ERROR) error("ファイル送るエラー2\n"); header2.fsize=header2.fsize-1000000; } } fclose(fp2); printf("ファイル送信完了\n"); これがクライアント側のプログラムです。 while(header.fsize>0){ if(header.fsize<=1000000){ nFileSize=header.fsize; pFileBuffer=(char *)calloc(nFileSize,sizeof(char)); res=recv(finger, pFileBuffer, nFileSize, 0); if(res==SOCKET_ERROR) {error("ファイル受信エラー2\n"); break;} fwrite(pFileBuffer,sizeof(char),nFileSize,fp); break; } else{ pFileBuffer=(char *)calloc(1000000,sizeof(char)); res=recv(finger,pFileBuffer,1000000,0); if(res==SOCKET_ERROR){error("ファイル受信エラー2\n");break;} fwrite(pFileBuffer,sizeof(char),1000000,fp); header.fsize=header.fsize-1000000; } } fclose(fp); アドバイスよろしくお願いいたします。
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.