使用套接字发送文件

时间:2011-05-16 18:52:57

标签: c++ winapi http sockets winsock

我正在尝试创建一个基本的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ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ(“此”是发送数据中唯一正确的部分)

显然我错过了一些东西但你可以帮我正确地做这件事吗?

编辑:

使用buffer_size值代替sizeof(buffer)修复了丢失/损坏的数据问题。

1 个答案:

答案 0 :(得分:4)

你的问题是sizeof(buffer)给出了指针的大小,而不是它指向的大小。

添加buffer_size并将其用于mallocfreed