【发布时间】:2011-05-16 18:52:57
【问题描述】:
我正在尝试创建一个基本的 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);
现在我知道它可以在读取最后一个块后发送一些不必要的数据,但在尝试修复它之前,我想知道它有什么问题。它适用于文本文件,我正在使用 fgets。但是在切换到 fread 支持二进制文件后,文本文件损坏并变成这样:ThisÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ(“This”是发送数据中唯一正确的部分)
显然我遗漏了一些东西,但你能帮我正确地做到这一点吗?
编辑:
使用buffer_size 值而不是sizeof(buffer) 修复了丢失/损坏的数据问题。
【问题讨论】:
-
你能告诉我们
cleint->send的签名和/或代码吗?具体来说,它如何知道要发送多少字节? -
哦,我太傻了,我在客户端使用 strlen->send :-) 谢谢,但我无法将您的评论标记为解决方案,所以我会继续标记 Bo 的。
标签: c++ winapi http sockets winsock