• 締切済み

大きいサイズのファイルを受信するときだけエラー

サーバからファイルを1024バイトづつ読み込み内容をそのままsendで送り、recvで受け取り保存を繰り返しています。しかし、送るファイルのサイズが1M程度になると、途中で大量の文字化けした文字列が表示されてエラーに待ってしまいます。エラーになる正確なサイズはわかりませんが、100KB,200KBの小さいサイズは問題ありません。 特に表示する処理はしていないはずなのですが。 バッファか何かの関係でしょうか? サーバはWindows,クライアントはRedHat9.0です。

  • earth
  • お礼率5% (17/300)

みんなの回答

  • uyama33
  • ベストアンサー率30% (137/450)
回答No.1

自信は有りませんが、 スタックオーバーフローだと思います。 保存するときに、 file を開いて、書き込んではどうでしょうか? あるいは、保存領域を 別に確保しながら(malloc) とれたら保存、だめならあきらめる。 とすればいいと思います。

関連するQ&A

  • ファイルの受信

    c言語で、クライアント側のファイルを開き、内容をそのまま送信しているはずなのですが上手くいきません。 テキストファイルは正しく送れるようですが、他の実行ファイルなどはダメみたいです。 送信側は、"rb"でオープンし,whileで fread(send_buf,1024,1,fp); send(soc,send_buf,strlen(send_buf),0); を繰り返しています。send_buf[1025]です。 送信側は Recv_buf[1025];で size = recv(soc,Recv_buf,1024,0); fwrite(Recv_buf,size,1,fp); whileで繰り返し受信がなくなったらselectでタイムアウトしています。 いろいろ調べたのですがSleepが必要らしいそうですが・・・どうなんでしょう?

  • C言語でのネットワークプログラミング

    現在Linuxを用いてC言語でTCP/IPのサーバ、クライアントプログラムを作成しています。 sendとrecvの正しい使い方がわかっておりません。 一度のrecvですべてのデータを受け取れないことはわかっているのですが、どのように記述するのが良いのでしょうか。1バイトずつrecvするのは大間違いであると何処かのサイトで読みました。 ・現在の仕様 サーバがデータの文字列をsendで送ってくる クライアントはrecvで1バイト読み込みを繰り返し、配列に格納し、\0を見つけるとループを抜ける recvした文字列を画面表示 表示したあとはrecvに戻る

  • winsockでファイル転送

    教えてください。 windockを使いファイルをサーバ側からクライアント側に転送したいのですが、テキストファイルfgetsで一行ずつ読み込んで、それをsendで転送し、クライアントでrecvで読み取り、テキストファイルに書き出す。 という一連の流れより、もっと簡単に、ファイルを転送する方法又はMFCの関数等ありますか? [環境] visual C++ 6.0 MFC

  • 0byteデータの送信と受信

    現在unixでsocketプログラムを書いています。 FTPライクなプログラムを書いているのですが、ファイルを送受信する場合、ファイルの終端をどうするかを考えています。 ファイルサイズを送るのはなしです。 sendで0byteのデータを送り、recvで0byteのデータを受信した場合にファイルの終端に達したとして処理を終らせたいと考えています。 実際、sendでは0byteのデータを送信してもエラーにはなりませんが、recvでは受信できません。 そのような処理はできるのでしょうか? よろしくおねがいします。

  • C++ TCP受信 突然切れる

    C++のTCPソケット(recv関数)を使ってサーバからデータを定期的に受信する クライアントを作っているんですが、データの受信中?に突然TCP接続が 切れることがあります。 より正確にはrecvの戻りが0(sizeが0=切断された)になってしまいます。 物理的に配線が切れたとかでもなく、誰も手を触れず放置した状態のときに突然 切れたりとかわけが分かりません。 もしかしてTCPソケットって接続し続けてはいけないとかあるんですかね? 分かる人がいたら宜しくお願いします。

  • VC++2008Enterpriseでwinsockを扱っていいるので

    VC++2008Enterpriseでwinsockを扱っていいるのですが、 クライアント側(PC)からファイルを読み込んで、ソケットを使って、サーバー側に渡し、何もせず、そのままクライアントに返したものをprintfすると。ファイルの後ろに大量のゴミがくっついて、それの除去ができないのです。 サーバー側では普通に出力できるのですが、何でクライアント側だけ汚いか、よくわからないんです。 送ったファイルはテキストファイルで中身は aaa bbb 111 とこんな感じです。 クライアントのソースは、受信部分を抜粋しますと //ファイルを1行づつ読み込む while((fgets(buffer1, size, fp))!=NULL){ len = strlen(buffer1); sprintf(str,"%4d%s",len,buffer1); //printf("%d行目:バイト数=%s\n%s\n",n,str,buffer1); ok = send(s, str, (int)strlen(str), 0); if(ok==SOCKET_ERROR){ printf("送信できません\n"); exit(1); }else if(ok ==-1){ perror("send"); break; } n++; } shutdown(s,1); while(1){ ok = recv(s, recv_buf, sizeof(recv_buf),0); if(ok == -1) { printf("受信エラー\n"); shutdown(s,2); closesocket(s); break; }else if(ok ==0){ printf("送信終了\n"); shutdown(s,2); closesocket(s); break; }else { printf("%s\n",recv_buf); } } } } これで、出力すると大量のゴミがつくんです。 どなたか、ご指導願い無いでしょうか?

  • メールでPDFファイルが読めなくなりました。

    送られてきたメール(PDFファイル付)が文字化けし、添付ファイルも開けない状況です。「このメールには、余分な改行が含まれている可能性があります。」という表示が出ます。文字だけのメールは届きます。  PDFファイルのサイズは、900kb程度です。なお、9月に送られてきた10kbの添付ファイル(同じPDFファイル)は開けました。原因がわかる方教えてください。

  • ニュースグループで、大きいサイズの添付ファイルが文字化けする

    今月からプロバイダをASAHIネットに変更し、ネットニュースを利用するようになったのですが、動画や画像の添付ファイルの内、サイズの大きい物が文字化けしてしまいます。 どうも256KB以上のサイズになるとこうなるみたいです。 プロバイダによると、サイズによる規制みたいなものはしてないそうです。 使ってるニュースリーダーは outlook Express 6.0ですがブラウザにOpera V.7.52を使っているのでOperaで見ることもあります。両方とも同じように文字化けしてしまいます。 サイズが256KB以下の添付ファイルなら画像でも動画でも(動画ではほとんどこのサイズのはありませんが)きちんと見ることができます。 はたして見る事ができるのでしょうか? もし可能だとしたら、そのやり方を是非教えて頂きたく思います。 宜しくお願いします。

  • ファイルサイズとは

    メール送信で添付ファイルをつける時、 ファイルサイズの大きさを確認してからメールしますが、 ファイルサイズとはアイコンをクリックした時に下に表示される ○○○KB(キロバイト)の事ですか? それともPhotoShopで開いて画像解像度の一番上の ピクセル寸法:○○M(メガバイト)の事ですか?   またこの2つのサイズが、一致しないのが不思議です。 (例えばアイコンをクリックして下の表示を見ると400KBであるのに PhotoShopで開くと4Mとなったりします。) 同じ物なのに、このサイズの大幅な違いが、とても不思議です。

  • ソケット通信にてサーバ日時を取得する方法?

    ソケット通信にて(send及びrecv)でクライアントからサーバのタイム情報を取得する方法はありますか?

専門家に質問してみよう