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

本文介绍了一种改进的大文件传输方法,通过循环确保每次发送的数据都能到达接收方,避免了数据丢失的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值