【1】实现的功能
文件的上传、下载(包括超过2G的大文件)、断点续传、秒传、删除等等。
【2】项目框架
整个项目是在Linux环境下用C语言开发的,基于TCP协议,采用多线程的socket通信方式。
普通上传和秒传:客户端会先计算文件的MD5值发送给服务器,服务器会从自己的md5文件中查找有没有该文件的md5值存在,如果存在,则会发送提示给客户端表明服务器端已经存在该文件,进行秒传;如果不存在则进行普通上传。
下载和断点续传:客户端和服务器都会首先尝试打开该文件,如果服务器端打不开该文件,说明不存在该文件,无法下载,如果服务器能打开该文件,而客户端打不开该文件,说明为普通下载,如果客户端能打开该文件,服务器端会发送文件大小给客户端,客户端会计算本地的文件大小和服务器端的文件大小,如果大小相同,则说明本地已经存在该文件,如果不相同,客户端会将文件大小发送给服务器,服务器将文件指针偏移到客户端文件大小出开始发送,这就是断点续传。
超过2G的大文件处理:打开文件时使用O_LARGEFILE,文件的大小用long long类型,文件大小的输出使用%lld等。
系统命令:如ls等通过fork+exec系列函数使用管道重定向进行实现。
【3】源代码
源代码已经上传至GitHub,如果有兴趣可以查看!
GitHub源代码链接——基于TCP实现的大型文件(超过2G)传输系统