socket tcp 发送大数据或文件注意事项

由于使用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) ); 

你可能感兴趣的:(C++)