win32 Socket接收函数recv问题
我遇到个很纠结的问题,客户端发过来多少字节按理说我接收多少字节就行了啊。
可到了传文件时就出现问题了,传小文件还好传大文件就不行。
代码:
int block_size=1;
char file_buf[block_size]; //临时缓冲区
//recv(*temp_sock,(char *)file_data,file_len,0);
/*
*file_len>0则向文件写入网络内容
* 如果:file_len >= block_size
向文件写入block_size长度的内容
file_len减少block_size
文件指针移至末尾
否则:向文件写入file_len长度的内容
file_len减少file_len
文件指针移至末尾
*/
while(file_len>0){
if(file_len >= block_size){
recv(*temp_sock,(char *)file_buf,block_size,0);
fwrite(file_buf,1,block_size,pt_file);
file_len-=block_size;
fseek(pt_file,0L,SEEK_END);
}else{
char file_buf2[file_len];
recv(*temp_sock,(char *)file_buf2,file_len,0);
fwrite(file_buf2,1,file_len,pt_file);
file_len-=file_len;
fseek(pt_file,0L,SEEK_END);
}
}
如果block_size 为1那就相当于一个循环每接收一个字节写一个字节,大文件小文件都没问题,速度当然很慢
但是把block_size 设为2时,传小文件可以,文件达到10M以上就会丢失一个字节,
我把block_size设为文件的长度,即一次性接收完更不行,后面还有无数字节收不到。
这是怎么回事啊?哪位帮我看看