私はCで単純なWebサーバーを作成していますが、今は大きなファイルを転送する方法を解明しようとしています。私は40MBのファイルでこれをやろうとしていますが、セグメンテーションフォルトが発生しています(少なくともwgetが教えてくれることです!)cでソケットを使用して大きなファイルを送信する際に問題が発生しました
実際には、それは単に終了します、それは私がしようとすると、wgetを使用してファイルを取得するときに、それはsegフォールトでエラーが発生すると言います。ファイルを送信するコードは次のとおりです。
while(1) {
int bytes_read = fread(file_buffer, 1, BUFFER_SIZE, f);
printf("Bytes read: %d\n", i * 1024);
if (bytes_read == 0) {
if (logging > 0) {
printf("End of file reached...\n");
}
break;
} else {
send(client, file_buffer, strlen(file_buffer), 0);
if (logging > 1) {
printf("Buffer (%d): %s\n\n", bytes_read, file_buffer);
}
}
i++;
}
何か問題が起こっていますか?小さなファイルでもうまく動作しますが、これだけではありません。ああ、読み込むバイト数は、試行するたびに変わり、240000から770000になります。ありがとう!
これは、バイナリストリームでstrlenを使用することはできません。最初の0バイトで停止します。あなたのsend呼び出しでbytes_readを使用していない理由はありますか? – Joe