【发布时间】:2016-04-03 20:22:21
【问题描述】:
我无法使用套接字传输文件。我的意思是可以传输文件,但它的大小总是不同的。有一段代码用于转帐:
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 不等。我的错在哪里?
【问题讨论】:
-
您确定要写
sizeof(buffer)吗?我的意思是,它是整个缓冲区中的字节数,而不是大小。另外,我怀疑缓冲区是否已满。 -
顺便说一句:我指的是
fwrite -
我试过sizeof(buffer)和MAX_MESSAGE_LENGTH(16384),结果总是一样
-
msg_len的值是多少?在fwrite期间,您不应尝试向output写入更多内容 -
msg_len 总是返回 16384