logo资料库

客户端:FTP的设计与实现.doc

第1页 / 共15页
第2页 / 共15页
第3页 / 共15页
第4页 / 共15页
第5页 / 共15页
第6页 / 共15页
第7页 / 共15页
第8页 / 共15页
资料共15页,剩余部分请下载后查看
客户端设计说明书
一、概述
二、开发目标
二、参考文档
三、开发工具和平台
四、测试工具
五、程序结构
1)类定义
2)主要类接口
2.1 CAlienFTPClientDlg类
2.2 AlienFTPCmd类
3)线程定义
五、功能模块详细设计
1)登陆
2)退出
3)列目录
4)下载文件
5)上传文件
6)下载目录
7)上传目录
8)删除文件
9)删除目录
10)新建目录
11)断点续传
12)状态计算
六、体会
附:实现结果
Alien FTP 的设计与实现 客户端设计说明书 笪庆 内蒙古农业大学 计算机科学与技术系计算机网络课程设计报告 Alien FTP 的设计与实现 客户端设计说明书 完 成 人: 杨婷 组 员 : 指导教师: 夏耐 2012 年 1 月 1
Alien FTP 的设计与实现 客户端设计说明书 笪庆 目录 一、 概述 .......................................................................................................................................... 3 二、 开发目标 .................................................................................................................................. 3 二、参考文档 .................................................................................................................................... 3 三、开发工具和平台........................................................................................................................ 4 四、测试工具 .................................................................................................................................... 4 五、 程序结构 .................................................................................................................................. 4 1)类定义 .......................................................................................................................................... 4 2)主要类接口 .................................................................................................................................. 5 2.1 CAlienFTPClientDlg 类...............................................................................................................5 2.2 AlienFTPCmd 类 ..........................................................................................................................6 3) 线程定义 .................................................................................................................................... 6 五、 功能模块详细设计 .................................................................................................................. 7 1) 登陆 ............................................................................................................................................... 7 2) 退出 ............................................................................................................................................ 8 3) 列目录........................................................................................................................................ 8 4) 下载文件 .................................................................................................................................... 9 5) 上传文件 .................................................................................................................................. 10 6) 下载目录 .................................................................................................................................. 11 7) 上传目录 .................................................................................................................................. 12 8) 删除文件 .................................................................................................................................. 12 9) 删除目录 .................................................................................................................................. 12 10) 新建目录 ................................................................................................................................ 13 11) 断点续传 ................................................................................................................................ 13 12) 状态计算 ................................................................................................................................ 14 六、 体会 ........................................................................................................................................ 14 附:实现结果 .................................................................................................................................. 15 2
Alien FTP 的设计与实现 客户端设计说明书 笪庆 Alien FTP 客户端设计说明书 笪庆 061221015 一、概述 客户端感觉上要比服务器端简单一些,其实不然。就我的开发体会而言,服 务器端只要侦听 21 号端口,若有请求就打开控制通道,然后等待用户的命令做 出相应的响应,并打开数据通道进行数据传输(目录列表或者文件),除了某些 命令(例如 USER 和 PASS),大部分的命令都是独立的,这就使得服务器端并 不会存在复杂的有限状态机,特别是当我们并不需要实现其所有命令的时候(实 际上我们实现了 15 条命令,具体见《协议说明书》)。而客户端则是根据功能需 求向服务器端发出各种指令来完成的,但是一些稍复杂的功能,例如目录的下载 (或上传),服务器端并不提供这条命令,但是我们可以通过发出一系列其服务 器提供的命令的组合来达到这个效果,生成这个命令组合便是客户端需要做的事 之一。这就有点像服务器提供少量“机器指令”,客户端则用这些少量的“机器 指令”去“搭积木”来完成功能需求。除此之外,客户端还要提供更多的图形元 素,例如本地和远程的文件目录列表等。 在我们这个客户端的设计中,我们共完成了登陆,退出,列目录,下载/上 传文件,下载/上传目录,删除文件/目录,新建目录,断点续传以及传输过程中 状态计算(比如下载速度,下载时间和剩余时间、传输进度百分比的计算等等) 等功能,并通过多线程的方法使得整个软件不至于在下载或上传时出现由于某个 函数的繁忙计算而导致界面“死掉”的情况。 由于我们是并行开发的,即我完成客户端,同时方超和单梦凡完成服务器端, 所以我在开发时就没法用他们写的服务器端来进行测试。取而代之的是,我用了 主流的 FTP 服务器端软件 Serv-U 来测试我写的客户端。 二、开发目标 设计并实现一个符合标准 FTP 协议规范的,拥有登陆,退出,列目录,下载 /上传文件,下载/上传目录,删除文件/目录,新建目录,断点续传以及传输过 程中状态计算等功能的 FTP 客户端软件。 二、参考文档 《协议说明书》(我们的前期文档) 3
Alien FTP 的设计与实现 客户端设计说明书 笪庆 《Visual C++ 6.0 网络及 Internet 开发指南》 《Visual C++网络程序设计实例详解》 《Visual C++网络高级编程》 http://www.csdn.net 三、开发工具和平台 Visual C++ 6.0,在 Windows XP SP3 下开发。 之所以选择 Visual C++,是因为我本身对于 VC 的图形界面编程较为熟悉, 相对而言对于 java 的图形界面的编程不是很熟悉(虽然 java 是以网络应用见长 的)。而不同的语言提供的 socket 接口又大体上差不多,所以我选择了 VC 来作 为开发工具。 四、测试工具 Serv-U 6.3。 正如上文所说,我们是并行开发的,所以我的客户端只能通过连接现有的 FTP 服务端软件来测试,这里我选择了使用较广,操作方便的 Serv-U。 五、程序结构 1)类定义 class specification CAlienFTPClientDlg AlienFTPCmd GetDirName RmdDialog 主对话框类,用于图形界面的处理,通过调用 AlienFTPCmd 类提供的函数实现与服务器 的连接与交互。 FTP 命令处理类,该类主要负责实现功能需求 的各种函数,供 CAlienFTPClientDlg 直接调 用 , 同 时 也 提 供 一 些 基 本 操 作 使 CAlienFTPClientDlg 可以通过这些操作的组 合完成复杂的功能。 用于弹出对话框让用户输入待新建的目录的 名称 用于询问用户是否要删除一个远程的非空目 录。 4
Alien FTP 的设计与实现 客户端设计说明书 笪庆 RestDialog 本来打算用此对话框来在待传输的文件在接 收方已存在时询问用户选择续传还是覆盖的 对话框类,但是由于在线程中弹出对话框总是 出错,所以后来就用在主对话框中加一单选框 代替,寒假有时间我会尽量修正这个问题。 2)主要类接口 2.1 CAlienFTPClientDlg 类 function classmember FindLocFile OnInsertFile InsertServerFile 根据指定的本地路径将该路径下的文件以列表的形式在 主对话框的 List Control 中显示出来 被 FindLocFile 调用,用于向表示当前的本地目录的 List Control 插入一条目录/文件信息 用于向表示当前的远程目录的 List Control 插入一条目录 /文件信息 用于查找本地文件/目录的图标 用于根据远程文件/目录的的文件类型在本机查找对应类 型注册的图标 RemoveLocalDirectory 删除本地目录 GetFileIcon GetFileIcon2 OnDblclkListLocal 本地文件列表的双击响应事件函数,用户进入某个本地目 录,并显示该目录里的文件列表 OnButtonBacklocal 本地文件列表的返回上一目录的响应函数 OnButtonConnect 与服务器连接的函数 OnButtonLogoff 与服务器断开的函数 OnDblclkListServer 远程文件列表的双击响应事件函数,用户进入某个远程目 OnButtonBackserver 远程文件列表的返回上一目录的响应函数 录,并显示该目录里的文件列表 OnDownload OnUpload OnLocalDel OnServerDel OnLocNewDir OnSerNewDir 下载,在该函数中,将启动一个线程用于下载任务 上传,在该函数中,将启动一个线程用于上传任务 删除本地某个文件 删除远程某个文件 在本地的当前路径下新建目录 在远程的当前路径下新建目录 5
Alien FTP 的设计与实现 客户端设计说明书 笪庆 OnRefreshLoc OnRefreshSer 刷新本地文件列表 刷新远程文件列表 2.2 AlienFTPCmd 类 classmember function Open Close Order Response Command GetFileItem List MoveFile LogOn LogOff 打开命令通道 关闭命令通道 向服务器端发送一条命令 接受服务器端的响应 向服务器端发送一条命令并接受回应 从服务器端发回的包含列表信息的数据中读取一条文件/ 目录信息 向服务器端发送 LIST 命令并接受服务器端在数据通道传 输过来的文件列表数据 用于单个文件的上传/下载 登陆服务器 断开服务器 3)线程定义 Thread ThreadTime ThreadStatus ThreadDownload ThreadUpload specification 定时器线程,用于下载/上传的已用时间,剩余时间的 计算和显示 状态量计算线程,用于显示当前传输文件名,已传输大 小,平均下载速度,下载进度的计算和显示 下载线程,根据下载的是文件或目录进行相应的下载任 务,在下载目录的时候,该线程还负责传输队列的显示 和更新 上传线程,根据上传的是文件或目录进行相应的上传任 务,在上传目录的时候,该线程还负责传输队列的显示 和更新 6
Alien FTP 的设计与实现 客户端设计说明书 笪庆 五、功能模块详细设计 1)登陆 登陆相对而言其他功能要简单得多,流程如下: 打开命令通道相应代码: m_Ctrlsok = socket(AF_INET,SOCK_STREAM,0); //建立套接字失败,则返回 false if (m_Ctrlsok == SOCKET_ERROR) { nRet = closesocket(m_Ctrlsok); ::WSACleanup(); return FALSE; } //定义结构体 sockaddr_in,用于设置地址信息。 struct sockaddr_in sockAddr; //将一个点间隔地址转换成一个 in_addr sockAddr.sin_addr.S_un.S_addr= inet_addr(serverhost.GetBuffer(serverhost.GetLength())); //设置协议族,在 socket 编程中只能是 AF_INET sockAddr.sin_family=AF_INET; //将主机的无符号短整形数转换成网络字节顺序 sockAddr.sin_port=htons(serverport); //连接服务器 if(0 != (connect(m_Ctrlsok, (sockaddr*)&sockAddr,sizeof(sockAddr)))){ return FALSE; } 这样,控制通道就打开了,向服务器端发命令时使用如下语句(命令在 outputstring 中): send(m_Ctrlsok,outputstring.GetBuffer(outputstring.GetLength()),outputstring.GetLength(), 0); 接受服务器端回应使用如下语句: recv(m_Ctrlsok, readbuf, 1024, 0); 通过服务器端回应的前三位的回应码(详见《协议说明书》)来判断命令执 行情况,即成功或失败。 7
Alien FTP 的设计与实现 客户端设计说明书 笪庆 2)退出 向服务器端发送“QUIT”命令即可。 3)列目录 列文件目录稍复杂点,但实际上也很简单,其复杂部分在于将服务器发过来 的文件信息数据进行解析并得到相应的文件名,文件类型,文件大小,创建时间 和权限等,处理流程如下: 其中发送命令于接受回应已在上文解释过,下面我们探讨关于 PORT 命令、 LIST 命令和侦听的 socket。 在发送 PORT 命令之前要确保本地已经创建好了侦听 socket,然后将该 socket 的地址和端口号转换为 xxx,xxx,xxx,xxx,xxx,xxx(其中前四个 xxx 是将 ip 地址中的点换成逗号,后两个 xxx 实际上分别是 port/256 和 port%256)作为 PORT 命令的参数发送给服务器端,服务器收到该条命令后会创建一个 socket 来连接我们已经在侦听的 socket,这样,数据通道就建立好了。 接着发送一条 LIST 命令,客户端便将当前远程目录下的文件信息从数据通 道发送过来,我们对接受到的数据进行解析便可以得到每个文件/目录具体的信 息,如文件名,文件类型,文件大小,创建时间和权限等。 侦听 socket 的创建如上文所述,其用于侦听要涉及到有关 socket 的另外三 8
分享到:
收藏