Linux--2--模拟百度网盘实现文件传输项目
项目简介:用C/C++语言模拟百度网盘,实现 Windows 与 Linux 之间上传,下载,交互文件。
项目环境:Red Hat Enterprise Linux 6
具体实现:采用多线程编程,用创建监听套接字 socket ,用TCP协议,实现交互方式,先创建管道,然后fork产生子进程,在子进程中用exec函数进行替换命令,用管道写端dup2覆盖替换标准输出,然后父进程将管道数据读出,发送给客户端,实现下载方式,用自定义协议,服务器端给客户端发送两次接收两次,用 sendfile 函数零拷贝发送,进度条显示下载进度,断点续传,上传文件过程中实现秒传。
本项目是实现了在不同服务器上进行文件的交互,上传以及下载。首先肯定是建立连接。本项目用的是多线程,因为是小项目,规模不大,实现百台设备间交互是可以的。创建监听套接字 socket ,用了TCP协议,因为它面向连接,更加可靠。用UDP也可以,只是比较麻烦。TCP协议和UCP协议区别就是,TCP是面向连接的、可靠的、基于字节流的传输层通信协议。UDP是无需建立连接,不可靠,面向报文。TCP只能点到点,而UDP不但支持一对一,还可以一对多,多对一,多对多的交互通信。
实现服务器端与多个客户端连接之后,先考虑实现交互。本质上就是想在客户端也可以操作文件,比如实现ls,rm,mv等简单命令。首先我们要设定自定义协议,我设定的输入命令方式模拟Linux系统命令,比如ls就是系统的ls。都是通过调用系统命令来实现的。
交互具体实现过程,先用pipe创建无名管道,pipefd[0]是用于读管道,pipefd[1]是用于写管道。pipe函数返回值为0 是成功,返回-1代表失败。然后服务器端的fork产生子进程,将接收的字符串先用strtok分割字符串,在子进程中具体用execvp函数进行替换命令,用管道写端dup2覆盖替换标准输出

本项目使用C/C++语言模拟百度网盘,实现Windows与Linux间的文件上传与下载功能。采用多线程编程与TCP协议,支持交互式文件管理命令如ls、rm等,同时具备秒传、断点续传特性。
最低0.47元/天 解锁文章
5936

被折叠的 条评论
为什么被折叠?



