gpt4 book ai didi

c - 您将如何接收与 'sendfile' 一起发送的文件?

转载 作者:行者123 更新时间:2023-12-04 13:58:40 25 4
gpt4 key购买 nike

我正在尝试实现一个基本的文件服务器。我一直在尝试使用此处的 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调用(来自Client进程,比循环更基本,只需要一个字母)

//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 调用中使用的文件指针代码,我应该如何使用发送文件?

最佳答案

您不能将 sendfile()FILE* 一起使用,您需要 open() 给出的文件描述符, close() 和 friend 。您不能只是将 FILE* 转换为 int 并认为它会起作用。

也许您应该阅读 sendfile() 联机帮助页以获取更多信息。

关于c - 您将如何接收与 'sendfile' 一起发送的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7621837/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com