gpt4 book ai didi

c++ - 使用 winsock 进行文件传输 (c++)

转载 作者:行者123 更新时间:2023-11-30 05:29:26 25 4
gpt4 key购买 nike

我无法使用套接字传输文件。我的意思是可以传输文件,但它的大小总是不同的。有一段转账代码:

FILE *inFile = fopen(this->FullDir, "r+b");
//FILE *outFile = fopen(this->DeskDir, "w+b");
if (inFile != 0)
{
char* buffer[16384]; //выделяем блок 16Кб
while (!feof(inFile)) //пока не конец файла
{
fread(buffer, 1, sizeof(buffer), inFile); //копируем блок
send(s, (char*)&buffer, sizeof(buffer), 0);//передаём блок
}
}

接待处:

do
{
msg_len = recv(new_client_socket, (char*)&buffer, MAX_MESSAGE_LENGTH, 0);
fwrite(buffer, 1, sizeof(buffer), output);
} while (msg_len > 0);

文件大小为 2,50Mb;大小从 1MB 到 2,2Mb 不等。我的错误在哪里?

最佳答案

您的代码需要 4 个修复:

  • 发送方需要获取 fread 的返回值并最初发送那么多字节
  • 接收方需要写入 msg_len 字节而不是 sizeof(buffer)

  • 特别是如果发送套接字设置为非阻塞模式,send() 函数可能不会在一次调用中发送所有给定的数据。您需要查看 send() 的返回值,并有一个循环发送()数据并推进缓冲区,直到所有数据都已发送

  • 作为奖励项目,您应该从“(char)&buffer”中删除发件人中的 & 和 (char )。 “缓冲区”已经是缓冲区中第一个 itgem 的地址。

关于c++ - 使用 winsock 进行文件传输 (c++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36390704/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com