题目
分析
-
用户
用户类型(userType):下载用户(downloadUser,不被允许上传)、上传用户(uploadUser,不被允许下载)、匿名用户(guest,不被允许上传、下载)。
用户状态(userState):上传(upload)、下载(download)、浏览(scan)。
用户当前所处的位置(userPosition):用户位于(浏览)哪个文件夹。 -
文件夹
文件名(fileName/folderName):文件夹的名字(字符串,不包含空格和回车)。
文件大小(fileSize/folderSize,单位是byte):a文件夹的大小就是a所包含的全部 文件 的大小。
当前状态(fileState/folderState):正常(normal,可以进行任何操作)、上传未完成(uploading,只允许进行浏览),其中如果一个文件夹中的文件/文件夹处于上传未完成状态,该文件夹就处于上传未完成状态。 -
FTP服务器
访问用户的最大数量(maxUserNumber):达到数量上限后其他用户不能再访问服务器。
服务器的最大流量(maxServerFlux):服务器流量的上限。
单个用户允许的最大下载/上传流量(maxUserFluxx,我不知道他是多打了一个x
还是就是这样):单个用户流量的上限。
用户流量(userFlux):userFlux=min(presentMaxUserFlux,maxUserFlux)。
单个用户最大流量(presentMaxUserFlux):presentMaxUserFlux=[maxUserFlux/userTotal]。
活动用户(userTotal):该时刻正在进行上传/下载操作的用户的个数。 -
命令(order)
connect命令、quit命令、cd命令、cd..命令、download命令、upload命令。
connect命令,格式:[name]+空格+connect+参数A,例如,tsinghua connect 1
connect命令,含义:表示名叫name的用户请求以A的用户类型访问服务器,如果当前的用户数量没到达maxUserNumber,并且该用户未连接到服务器,则连接成功,服务器的反馈信息为success
。否则反馈信息为unsuccess
。连接成功后该用户的位置(userPosition)为服务器的根目录。A=1表示上传用户,A=2表示下载用户,A=3表示匿名用户。
quit命令,格式:[name]+空格+quit,例如,tsinghua quit
quit命令,含义:表示名叫name的用户断开与服务器的连接。如果用户未连接反馈unsuccess
,否则反馈success
。需要注意的是用户在任何状态下都可以断开连接。
cd命令,格式:[name]+空格+cd+空格+[文件夹名字(floderName)],例如,THU cd FD
cd命令,含义:表示名叫name的用户想进入所处文件夹中的一个叫floderName的文件夹。如果在该文件夹中存在一个叫floderName的文件夹,并且floderName处在normal的状态则改变name的位置(userPosition),反馈success
。如果floderName不存在,或者不处于normal状态,反馈unsuccess
。
cd..命令,格式:[name]+空格+cd..,例如,9# cd..
cd..命令,含义:表示叫name的用户想要返回上一层文件夹,如果name处于根目录或者name没有连接到服务器反馈unsuccess
。否则,反馈success
并改变name的位置(userPosition)。
download命令,格式:[name]+空格+download+空格+[name1],例如,A download 1.txt
download命令,含义:表示名叫name的用户想要从当前文件夹下载名为name1的文件/文件夹。如果用户未连接或者name1不存在或者name1处于uploading状态,反馈unsuccess
。否则,反馈success
,并开始下载name1。(name下载的是执行命令时那一刻的文件夹,不能下载到在下载开始后新上传的文件夹)。
upload命令,格式:[name]+空格+upload+空格+[name1]+空格+[size],例如,A upload B 1
upload命令,含义:名叫name的用户想在当前文件夹上传一个叫name1的大小为size的文件/文件夹。当size=0时,文件夹,当size>0时,文件。如果用户未连接或者用户没有上传的权限或者用户未连接,反馈success
,否则,反馈unsuccess
(我盲猜,这里写错了),并且开始上传。需要注意的时,上传的文件夹只能是空文件。
思路
大模拟。