我有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);
}
我错过了什么?这适用于小文本文件。
答案 0 :(得分:1)
问题解决了:
其中一个答案让我意识到自己的错误。 \0
不是一个错误的角色。我的客户接收图像的方式出了什么问题。每次客户端收到缓冲区时,都会检查收到的strlen,但strlen(buffer)
在遇到\0
时STOPS。所以我将从strlen(buffer)
写入的字节数更改为客户端在套接字上读取的实际字节数。
感谢Iharob Al Asimi的发言,感谢大家的帮助。