我想用C发送文件到特定的套接字;下面的代码:发送文件到套接字
int send_file(char *filepath,int sock)
{
FILE *fp=fopen(filepath,"rb");
void *buff=malloc(2000);
int i=1;
while(i)
{
int bytes_read=fread(buff,1,2000,fp);
i=!(feof(fp));
int bytes_sent=0;
while(bytes_sent<bytes_read)
{
int n=send(sock,buff+bytes_sent,bytes_read-bytes_sent,0);
if(n==-1)
return -1; //failure
bytes_sent+=n;
}
}
fclose(fp);
free(buff);
return 0;
}
当我运行这个程序,并尝试在Firefox中的文本文件在http://127.0.0.1:8080/,文件的一部分从最终切断如果文件大小超过2000个字节。如果我发送一张图片,只有图片的3/4加载(从底部切下)。
该函数总是返回0给调用者。它发送的最后一个字节块在哪里消失?在返回之前是否需要刷新一些流?
谢谢
编辑: 这是一个片段从我的main()函数:
send_file(filepath, sock);
close(sock);
return 0;
}
你确定了“失败”路径没有发生?您应该在此时向标准错误输出错误消息,而不是仅返回-1。 – 2010-01-29 20:27:59
是的,我检查了它返回到main的值,它总是0. – io555782 2010-01-29 20:56:26
你能编译带有最大警告的代码并发布警告吗?你是否包含stdio.h,stdlib.h和sys/socket.h? – 2010-01-30 03:55:56