我正在尝试创建一个基本的 HTTP 服务器以了解有关其工作原理的更多信息。我在向客户端发送二进制文件时遇到困难。我的代码如下:
char * buffer = (char *)malloc(sizeof(char) * 512);
fseek(content_file, 0, SEEK_SET);
while (!feof(content_file)) {
size_t read = fread(buffer, sizeof(char), sizeof(buffer), content_file);
if (read > 0) {
client->send((const void *)buffer);
}
}
fclose(content_file);
free(buffer);
现在我知道它可以在读取最后一个 block 后发送一些不必要的数据,但在尝试修复它之前,我想知道它出了什么问题。它对文本文件工作正常,我使用的是 fgets。但是在切换到 fread 以支持二进制文件后,文本文件被损坏并变成了这样的东西:
显然我遗漏了一些东西,但你能帮我正确地做到这一点吗?
编辑:
使用 buffer_size
值而不是 sizeof(buffer)
修复了丢失/损坏的数据问题。
最佳答案
你的问题是 sizeof(buffer)
给你指针的大小,而不是它指向的内容。
添加一个 buffer_size
并将其用于 malloc
和 freed
。
关于c++ - 使用套接字发送文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6021947/