基本的なファイルサーバーを実装しようとしています。私はここにあるsendfileコマンドを使おうとしています:http://linux.die.net/man/2/sendfileTCPを使用しています。
正常に送信することはできますが、バイナリで送信するため、ハングアップするかどうかはわかりません。
recvでファイルを受信しようとしていますが、正しく送信されません。バイナリファイルを受け取り、それを文字列に入れる特別な方法はありますか?
編集:いくつかのコードを提供するように求められました、ここにあります:
SENDFILE呼び出し(サーバープロセスから)
FILE * file = fopen(filename,"rb");
if ( file != NULL)
{
/*FILE EXISITS*/
//Get file size (which is why we opened in binary)
fseek(file, 0L, SEEK_END);
int sz = ftell(file);
fseek(file,0L,SEEK_SET);
//Send the file
sendfile(fd,(int)file,0,sz);
//Cleanup
fclose(file);
}
RECIEVE呼び出し(クライアントプロセスから、ループよりもさらに基本的で、1文字だけが必要です)
//recieve file
char fileBuffer[1000];
recv(sockfd,fileBuffer,1,0);
fprintf(stderr,"\nContents:\n");
fprintf(stderr,"%c",fileBuffer[0]);
編集:戻り値をチェックするためのコードを書きました。sendfileはerrno9を与えています-不正なファイル番号。これは、呼び出しの2番目のファイル記述子(送信するファイルの記述子)にあると想定しています。sendfileがintではないと文句を言っていたので、intとしてキャストしました。
上記のsendfile呼び出しで使用したファイルポインタコードを指定して、send fileをどのように使用する必要がありますか?