[英]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 个修复:
接收者需要写入 msg_len 字节而不是 sizeof(buffer)
特别是如果发送套接字设置为非阻塞模式,则 send() 函数可能不会在一次调用中发送所有给定的数据。 您需要查看 send() 的返回值,并有一个循环发送 () 数据并推进缓冲区,直到所有数据都已发送
作为奖励项目,您应该从“(char )&buffer”中删除发件人中的 & 和 (char ) 转换。 “buffer”已经是缓冲区中第一个 itgem 的地址。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.