Web服务器实现文件传输程序设计
总体概括来说就是设计一个Web服务器的流程,将执行流程分为简单的步骤,每个步骤作为一个模块来实现。
1、整体设计
服务器程序发送文件给客户端或者从客户端接收文件,每次通信只能做一次文件传输,传输完毕后准备处理下一次通信。客户端程序,接收或者发送一个文件后就可以退出。因此,服务器短程序是一个死循环,处理一次之后不退出,继续监听。客户端程序处理一个连接就可以了。
2、客户端程序设计
客户端程序主要任务有3个,
(1)分析用户输入的命令
(2)根据命令向服务器端发出请求
(3)等待服务器返回请求的结果
第一个任务是分析命令,本FTP程序客户端给用户提供8种命令,如下表所示:
用户输入的命令 |
命令含义 |
get |
从服务器得到文件 |
put |
向服务器传输文件 |
cd |
进入客户端的目录 |
!cd |
进入服务器端的目录 |
ls |
列出客户端当前目录的内容 |
!ls |
列出服务器端当前目录的内容 |
connect |
连接服务器 |
bye |
退出程序 |
客户端通过标准输入得到一个字符串,分析字符串得到命令和参数,因此需要固定字符串的输入。固定好输入格式之后,客户端将字符串进行拆分判断来完成对应的功能。用户输入的每一个命令,都会通过客户端给服务器发送一个请求码,服务器端通过识别这个请求码来判断客户端的请求,从而进行处理。下面是用户输入的命令与对应请求的表:
用户输入的命令 |
对应的请求 |
get |
GET |
put |
PUT |
cd |
不需要与服务器通信,无请求 |
!cd |
CD |
ls |
不需要与服务器通信,无请求 |
!ls |
LS |
connect |
发出连接请求,不需要服务器端额外处理,所以没有请求码 |
bye |
BYE |
3、服务器端程序设计
服务器程序与客户端程序类似,也是有3个任务。
(1)分析请求代码
(2)根据请求代码做出相应的处理
(3)等待返回结果或者应答信息
根据上边客户端的设计我们知道在服务器端对应需要处理的请求码只有5种,如下表所示:
请求代码 |
对应的处理 |
GET |
向客户端传输文件 |
PUT |
接受客户端的文件 |
CD |
进入目录 |
LS |
将当前目录内用传输给客户端 |
BYE |
断开连接 |
分清楚任务之后,有两个主要环节需要明确,就是通信协议和服务器模型,本程序的通信协议分为两种。一种是get命令、put命令和!ls命令需要传输文件内容的命令,采用“四次握手”的通信协议;一种是!cd命令这种不需要传输文件内容的命令采用“两次握手”的通信协议。
服务器端使用并发服务器的模型,如果客户端发生阻塞,服务器依然能处理其他连接。