由于使用TCP发送大数据或文件时容易发生数据丢失,其主要原因是在发送此类数据时,不能确保数据的每个字节都发送到接收方。
发送通常文件使用如下方式:
FILE *File = fopen(filePath, "rb");
if(NULL == File)
return false;
fseek(File, 0, SEEK_SET);
char Buff[1024] = {0};
int ulFaceReadByte;
while(!feof(File))
{
ulFaceReadByte = fread(Buff, 1, 1024, File);
send(s, Buff, ulFaceReadByte, 0);
}
fclose(File);
但是此方法不能够确保每次发送的数据都能成功,从而使得数据丢失。因此改进原有方式为:
FILE *File = fopen(filePath, "rb");
if(NULL == File)
return false;
fseek(File, 0, SEEK_SET);
char Buff[1024] = {0};
int ulFaceReadByte;
while(!feof(File))
{
ulFaceReadByte = fread(Buff, 1, 1024, File);
while(!send(s, Buff, ulFaceReadByte, 0) ) ;
}
fclose(File);
增加一条while语句确保将所有的数据都发送出去。
同理发送大数据时也是增加while(!send(s, Buff, ulFaceReadByte, 0) );
本文介绍了一种改进的大文件传输方法,通过循环确保每次发送的数据都能到达接收方,避免了数据丢失的问题。
845

被折叠的 条评论
为什么被折叠?



