• ベストアンサー

ファイルの受信

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が必要らしいそうですが・・・どうなんでしょう?

質問者が選んだベストアンサー

  • ベストアンサー
  • mi-si
  • ベストアンサー率35% (200/567)
回答No.2

strlenでは、文字列の文字数しかチェック出来ませんので、バイナリを送信すると動作が予期出来なくなります。\0が出てくる迄の文字数を数えているだけなので、実際に読み込んだバイナリの途中で\0が出てくると、それ以降のデータが切られて送信されるため、ファイルが壊れます。 freadで読み込んだbyte数を知る事が出来るので、 #1さんのやり方を試してみるのが良いかと思います。

その他の回答 (1)

  • notnot
  • ベストアンサー率47% (4900/10359)
回答No.1

>fread(send_buf,1024,1,fp); >send(soc,send_buf,strlen(send_buf),0); ファイルから(最大)1024バイト読み込んで、その先頭から 0 が現れるまでを送信しているので駄目でしょう。 わからなければstrlenの仕様を調べてください。 未テストですが、 n=fread(send_buf,1,1024,fp); send(soc,send_buf,n,0); でどうでしょう?

関連するQ&A

専門家に質問してみよう