我正在尝试实现一个基本的文件服务器。我一直在尝试使用此处找到的 sendfile 命令:http: //linux.die.net/man/2/sendfile我正在使用 TCP。
我可以让它很好地发送,但它以二进制发送,我不确定这是否是挂断。
我正在尝试使用 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 调用(来自客户端进程,比循环更基本,只需要一个字母)
//recieve file
char fileBuffer[1000];
recv(sockfd,fileBuffer,1,0);
fprintf(stderr,"\nContents:\n");
fprintf(stderr,"%c",fileBuffer[0]);
编辑:写了一些代码来检查返回值。sendfile 给出 errno 9 - 错误文件号。我假设这是我在调用中的第二个文件描述符(我正在发送的文件的那个)。我将其转换为 int 是因为 sendfile 抱怨它不是 int。
鉴于我在上面的 sendfile 调用中使用的文件指针代码,我应该如何使用发送文件?