1.思路:为了实现各种大小的文件都可发送和接收,可设置缓冲区循环发送和接收,并记录文件读到的位置,如果某次读入到缓冲区的字节数小于缓冲区的大小,则说明文件发送完了,退出发送循环,关闭连接。并且Csocket是阻塞的,接收端接能接收到发送端发送的所有内容,直到发送端连接关闭,接收端退出接收循环。
//循环发送文件
2.主要代码
发送端:
do
{
file.Seek(step,CFile::begin);
over=file.Read(buffer,BUFFERSIZE);//文件读入缓冲
err=sockClient.Send(buffer,over);
if( BUFFERSIZE>over
)
break;
//缓冲区的字节数小于缓冲区,也就是文件小于一个缓冲区,退出
step+=err; //下一次从step开始读文件
}while(
true);
sockClient.close();
接收端:
while( true
)
{
finish=fileListen.Receive(buffer,BUFFERSIZE);
if(0==finish)
break;//客户端发送连接已经关闭,发送完毕
file.Write(buffer,finish);
step+=finish;//写文件的位置
}
注意:合理设置缓冲区大小,此方法效率较低,是不是多开线程能加快速度?
时间: 2024-11-11 01:06:27