繁体   English   中英

使用 winsock (c++) 传输文件

[英]File transfer with winsock (c++)

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

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 ) 转换 “buffer”已经是缓冲区中第一个 itgem 的地址。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM