使用fread读取图像会在缓冲区中添加\ 0

时间:2018-02-22 15:49:42

标签: c fread

我有HTTP客户端和服务器,客户端我将文件发送到服务器,服务器将文件发送回客户端。

将文件发送到服务器没有问题,但是当服务器发回需要多个部分发送的大文件(例如图像)时,每次fread进入我的缓冲区时,缓冲区都会收到\0某处,客户端收到损坏的文件。

这里是将文件发送回客户端的代码

            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);
            }

我错过了什么?这适用于小文本文件。

1 个答案:

答案 0 :(得分:1)

问题解决了:

其中一个答案让我意识到自己的错误。 \0不是一个错误的角色。我的客户接收图像的方式出了什么问题。每次客户端收到缓冲区时,都会检查收到的strlen,但strlen(buffer)在遇到\0时STOPS。所以我将从strlen(buffer)写入的字节数更改为客户端在套接字上读取的实际字节数。

感谢Iharob Al Asimi的发言,感谢大家的帮助。