我正在用 C 撰寫一個簡單的 Web 服務器,我想向瀏覽器發送一個大約 17KB 的影像。我正在嘗試使用 send() 函式,但我定義的緩沖區只有 4096,我不想更改它。所以我想將影像分成位元組塊發送,但瀏覽器似乎只是收到回應頭并且影像無法加載。如果我將 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);
}
瀏覽器如下:
圖片的回應頭
圖片無法加載
編輯 2022/3/25
我錯誤地洗掉了 %ld 的引數,對不起
uj5u.com熱心網友回復:
我得到了原因:
我不小心在每個塊的末尾添加了一個空白。換句話說,影像的資料是錯誤的。謝謝大家!
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/452964.html
