Socket局域网多线程传输文件的方法

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;//写文件的位置
}

注意:合理设置缓冲区大小,此方法效率较低,是不是多开线程能加快速度?

你可能感兴趣的:(socket编程,局域网传文件,socket传文件,文件循环传输)