作成した単純なサーバーアプリケーションとクライアントアプリケーションの間でファイルを転送しようとすると、問題が発生します。ファイルは正常に転送されますが、受信側(サーバー側)でファイルサイズが異なります。クライアント側でファイルを開き、fseek()を使用してファイルのサイズを見つけます。次に、fread()を使用してchar型のバッファーに読み込みます。UDPソケットを使用する必要があるため、sendto()を使用してこのバッファーを送信します。サーバー側では、recvfrom()を使用してこれを格納し、fwrite()を使用して別のファイルに書き込みます。しかし、ファイルのサイズを確認すると、はるかに大きくなっています。また、テキストファイルであるはずなのに開けません。私がどこで間違っているのかについて、いくつかの指針を教えていただけますか?また、これはソケットを介してファイルを送信するための最良の方法ですか?ファイルを送信するためのより良い方法はありますか?
ありがとう
クライアント側のコード
//Writing code to open file and copy it into buffer
fseek(fp, 0, SEEK_END);
size_t file_size = ftell(fp);
fseek(fp, 0, SEEK_SET);
if(fread(file_buffer, file_size, 1, fp)<=0)
{
printf("Unable to copy file into buffer! \n");
exit(1);
}
//Sending file buffer
if(sendto(sock, file_buffer, strlen(file_buffer), 0, (struct sockaddr *) &serv_addr, serv_len)<0)
{
printf("Error sending the file! \n");
exit(1);
}
bzero(file_buffer, sizeof(file_buffer));
ファイルを受信するためのサーバー側のコード
//Receiving file from client
char file_buffer[BUFSIZE];
if(recvfrom(sock, file_buffer, BUFSIZE, 0, (struct sockaddr *) &client_addr, &client_addr_size)<0)
{
printf("Error receiving file.");
exit(1);
}
char new_file_name[] = "copied_";
strcat(new_file_name,file_name);
FILE *fp;
fp = fopen(new_file_name,"w+");
if(fwrite(file_buffer, 1, sizeof(file_buffer), fp)<0)
{
printf("Error writing file! \n");
exit(1);
}