如何使用 C 中的套接字将大文件发送到浏览器?
how to send a large file to browser using socket in C?
我正在用 C 语言编写一个简单的 Web 服务器,我想将大约 17KB 的图像发送到浏览器。我正在尝试使用 send() 函数来实现,但我定义的缓冲区只有 4096,我不想更改 it.So 我想将图像分成字节块来发送,但浏览器只是似乎收到响应 header 并且图像无法 load.And 如果我将 BUF_SIZE 更改为 1024*32 并发送所有图像,它将起作用。
发送图片应该怎么做?如果你能给我一个建议,我将不胜感激。
我的代码如下:
#define BUF_SIZE 4096
char buf[BUF_SIZE];
readret=sprintf(buf,"HTTP/1.1 200 OK\r\n"
"Content-Length: %ld\r\n"
"Content-type: image/png"
"Accept-Ranges: bytes\r\n\r\n");
FILE *fp=fopen(file,"rb");
if (send(client_sock, buf, readret, 0) != readret){
close_socket(client_sock);
close_socket(sock);
fprintf(stderr, "Error sending to client.\n");
return EXIT_FAILURE;
}
if(fp){
while((readret=fread(buf,sizeof(unsigned char),BUF_SIZE,fp))>0){
if (send(client_sock, buf, readret, 0) != readret){
close_socket(client_sock);
close_socket(sock);
fprintf(stderr, "Error sending to client.\n");
return EXIT_FAILURE;
}
}
fclose(fp);
}
浏览器如下:
The response header of the image
the image can't load
编辑 2022/3/25
我错误地删除了 %ld 的参数,抱歉
我明白了原因:
我不小心在每个块的末尾添加了一个空格。换句话说,图像的数据是错误的。谢谢大家!
我正在用 C 语言编写一个简单的 Web 服务器,我想将大约 17KB 的图像发送到浏览器。我正在尝试使用 send() 函数来实现,但我定义的缓冲区只有 4096,我不想更改 it.So 我想将图像分成字节块来发送,但浏览器只是似乎收到响应 header 并且图像无法 load.And 如果我将 BUF_SIZE 更改为 1024*32 并发送所有图像,它将起作用。
发送图片应该怎么做?如果你能给我一个建议,我将不胜感激。 我的代码如下:
#define BUF_SIZE 4096
char buf[BUF_SIZE];
readret=sprintf(buf,"HTTP/1.1 200 OK\r\n"
"Content-Length: %ld\r\n"
"Content-type: image/png"
"Accept-Ranges: bytes\r\n\r\n");
FILE *fp=fopen(file,"rb");
if (send(client_sock, buf, readret, 0) != readret){
close_socket(client_sock);
close_socket(sock);
fprintf(stderr, "Error sending to client.\n");
return EXIT_FAILURE;
}
if(fp){
while((readret=fread(buf,sizeof(unsigned char),BUF_SIZE,fp))>0){
if (send(client_sock, buf, readret, 0) != readret){
close_socket(client_sock);
close_socket(sock);
fprintf(stderr, "Error sending to client.\n");
return EXIT_FAILURE;
}
}
fclose(fp);
}
浏览器如下:
The response header of the image
the image can't load
编辑 2022/3/25
我错误地删除了 %ld 的参数,抱歉
我明白了原因:
我不小心在每个块的末尾添加了一个空格。换句话说,图像的数据是错误的。谢谢大家!