linux下基于多线程和tcp去实现了一个模拟网盘,实现cs之间的下载互传大文件,实现断点续传,秒传,利用md5进行校验,实时显示百分比
整体框架:
整个项目是在Linux环境下用C语言开发的,基于TCP协议,采用多线程的socket通信方式。
普通上传和秒传:客户端会先计算文件的MD5值发送给服务器,服务器会从自己的md5文件中查找有没有该文件的md5值存在,如果存在,则会发送提示给客户端表明服务器端已经存在该文件,进行秒传;如果不存在则进行普通上传。
校验:利用md5值去比对
下载和断点续传:客户端和服务器都会首先尝试打开该文件,如果服务器端打不开该文件,说明不存在该文件,无法下载,如果服务器能打开该文件,而客户端打不开该文件,说明为普通下载,如果客户端能打开该文件,服务器端会发送文件大小给客户端,客户端会计算本地的文件大小和服务器端的文件大小,如果大小相同,则说明本地已经存在该文件,退出,如果不相同,客户端会将文件大小发送给服务器,服务器将文件指针偏移到客户端文件大小出开始发送,这就是断点续传。
系统命令:如ls等通过fork+exec系列函数使用管道重定向进行实现。