使用 fread 读取图像会在缓冲区中添加 \0
Reading an image with fread adds \0 in buffer
我在 HTTP 中有一个客户端和一个服务器,客户端向服务器发送文件,服务器将文件发回客户端。
我向服务器发送文件没有问题,但是当服务器发回需要分多段发送的大文件(例如图像)时,每次我 fread
进入我的缓冲区时,缓冲区在某处收到 [=12=]
,因此客户端收到损坏的文件。
这是将文件发回客户端的代码
FILE* readFile = fopen(fileName, "rb");
char buf[BUFFLEN];
size_t readlen = 1;
while (readlen != 0)
{
readlen = fread(buf, sizeof(char), BUFFLEN, readFile);
write(socket, buf, readlen);
}
我错过了什么?这适用于小文本文件。
问题已解决:
其中一个答案让我意识到我的错误。 [=10=]
不是错误的字符。问题出在我的客户接收图像的方式上。每次客户端收到缓冲区时,它都会检查收到的 strlen,但是 strlen(buffer)
在遇到 [=10=]
时停止。所以我将写入的字节数从 strlen(buffer)
更改为客户端在套接字上读取的实际字节数。
感谢 Iharob Al Asimi 的评论和大家的帮助。
我在 HTTP 中有一个客户端和一个服务器,客户端向服务器发送文件,服务器将文件发回客户端。
我向服务器发送文件没有问题,但是当服务器发回需要分多段发送的大文件(例如图像)时,每次我 fread
进入我的缓冲区时,缓冲区在某处收到 [=12=]
,因此客户端收到损坏的文件。
这是将文件发回客户端的代码
FILE* readFile = fopen(fileName, "rb");
char buf[BUFFLEN];
size_t readlen = 1;
while (readlen != 0)
{
readlen = fread(buf, sizeof(char), BUFFLEN, readFile);
write(socket, buf, readlen);
}
我错过了什么?这适用于小文本文件。
问题已解决:
其中一个答案让我意识到我的错误。 [=10=]
不是错误的字符。问题出在我的客户接收图像的方式上。每次客户端收到缓冲区时,它都会检查收到的 strlen,但是 strlen(buffer)
在遇到 [=10=]
时停止。所以我将写入的字节数从 strlen(buffer)
更改为客户端在套接字上读取的实际字节数。
感谢 Iharob Al Asimi 的评论和大家的帮助。