多线程断点下载原理

上传到服务器原理

   

 

商议客户端将文件长度Length、文件名NameId文件id以协议的形式发送到服务器。服务器判断Id是否为空,不为空时表示是断点上传,从存储断点上传文件的数据库中根据文件Id查询文件保存的Path并将Path返回,根据Path从上次的历史文件中读取上传的断点位置(断点位置记录在临时文件的*.log文件里的Properties部分了)

如果Id为空,则为初次上传,生成id,将idpath添加到数据库里

然后向客户端发送协议头Id(?包括记录断点位置的变量position=0表示初次,=p表示断点位置)并判断是否传输完毕。传输完毕删除数据库中的记录和临时文件,没有传输完毕继续传输

文件上传到客户端:

 

 

原理:

客户端从本地数据库(数据库包括文件本地路径path,服务器返回的id)查询有无上传记录有的话构造协议(文件长度、文件名字、id);没有的话构造协议中id=nullsocket请求返回字段idposition与如果第一次上传返回服务器随机生成唯一idposition=0就是第一次上传,将(idpath)添加到数据库;否则就是断点续传id=sourceidposition为上次上传的历史记录位置,从position开始上传并监视是否完成,上传完成时删除数据库存储的记录,没有上传完成时继续上传。

下面是多线程下载

 

 

原理:

连接服务器获取下载文件的大小,根据数据库中存放的信息(id=下载路径,Date=map(线程id,进度position))判断文件是否已经存在。不存在,划分每个线程下载文件大小,启动多线程下载;存在,从数据库获取每个线程已加载的长度。开始下载并监视,未完成,将每个线程已下载位置存放在数据库;完成,结束

posted @ 2016-08-08 20:26  菜鸟_阿亮  阅读(2234)  评论(0编辑  收藏  举报