C++ 使用套接字发送文件

C++ 使用套接字发送文件,c++,winapi,http,sockets,winsock,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);

我正在尝试创建一个基本的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以支持二进制文件后,文本文件被破坏,文本文件被破坏,变成了这样的东西:在切换到fread以支持二进制文件后,文本文件被破坏,文本文件被破坏,文本文件被破坏,变成了这样的东西:<代码>这个(代码>这个(代码>这个)55555205555555555555555555555基基基基基基5555555555基基基基基基55555甲甲甲甲甲甲555555基基基基基5555555基基基基基5555555甲甲甲甲甲甲甲甲甲甲甲甲甲甲555555基基基基基55555555555555基基基基基基基基基基基5555555甲甲甲甲甲甲甲甲甲甲甲甲甲甲甲甲甲甲甲甲甲

很明显,我遗漏了一些东西,但你能帮我正确地做这件事吗

编辑:
使用
buffer\u size
值而不是
sizeof(buffer)
修复了丢失/损坏的数据问题。

您的问题是
sizeof(buffer)
给出的是指针的大小,而不是指针指向的大小


添加一个
buffer\u size
并将其用于
malloc
freed
您的问题是
sizeof(buffer)
给出的是指针的大小,而不是指针指向的大小


添加一个
buffer\u size
并将其用于
malloc
freed

您可以向我们显示
cleint->send
的签名和/或代码吗?具体来说,它怎么知道要发送多少字节呢?哦,我真傻,我在客户端->发送:-)中使用了strlen,谢谢,但我不能将您的评论标记为解决方案,所以我会继续标记Bo。您能给我们看一下
cleint->send
的签名和/或代码吗?具体来说,它是如何知道要发送多少字节的?哦,我真傻,我在客户端->发送:-)中使用strlen,谢谢,但我不能将您的评论标记为解决方案,所以我将继续并标记Bo的。您可以使用以下代码获得文件大小:fseek(fp,0,SEEK\u END);亚硫酸化=ftell(fp);fseek(fp,0,SEEK_集);谢谢,CariElf。这就是我正在使用的。您可以使用以下代码获得文件大小:fseek(fp,0,SEEK\u END);亚硫酸化=ftell(fp);fseek(fp,0,SEEK_集);谢谢,CariElf。这就是我用的。