基于Java实现的一个FTP服务 资源下载地址https://download.csdn.net/download/sheziqiong/85706472资源下载地址https://download.csdn.net/download/sheziqiong/85706472一、系统概述1.1 业务背景FTP 服务提供了对文件传输的支持Web 服务提供了可供浏览的网页。对 FTP 文件传输服务的需求以及对浏览 Web 服务的需求是本程序的背景当然现在已经有很多 FTP 和 Web 服务器的很好的实现本程序也不可能说做得比知名的那些要好在这里程序的目的是为了锻炼网络程序设计与实践和软件系统设计与开发实践能力。1.2 总体目标实现一个 FTP 服务能够在客户端和服务器端查看和传输文件使用 TCP 和 UDP 两种协议方式进行实现并实现一个 Web 服务器能够提供让标准浏览器用 HTTP 协议来进行访问的网页并且能够支持多线程非阻塞的服务。综上所述最后会提供一个 FTP 服务器、一个 FTP 客户端、一个 Web 服务器程序。二、系统分析和设计2.1 系统概述2.1.1 业务需求描述FTP 服务器需求为客户端提供查看文件的功能为客户端提供上传文件的功能为客户端提供下载文件的功能能够接受 TCP 协议的访问方式能够接受 UDP 协议的访问方式。FTP 客户端需求能够从服务器上查看文件能够向服务器上上传文件能够从服务器上下载文件能够通过 TCP 协议访问服务器能够通过 UDP 协议访问服务器。Web 服务器需求为标准浏览器提供 Web 服务能够接受 http 请求并返回 HTML 网页能够支持多线程非阻塞的访问。2.1.2 外部接口需求硬件接口无直接硬件接口只通过 OS 等软件接口与硬件间接交互。软件接口相应的 JDK、JVM 环境以及标准的浏览器软件。通讯接口TCP 协议、UDP 协议、HTTP 协议。2.1.3 非功能性需求FTP 服务器要求响应时间不能过长且稳定、可靠FTP 客户端要求传输速度不能过慢且可随时访问服务器Web 服务器要求响应时间要短且安全可靠。2.1.4 约束条件开发环境Eclipse-Java IDEwindows7 系统。整个项目由 Java 开发所以要求系统装有相应的 JDK、JVM 环境另外FTP 服务器和客户端要求系统有 tcp、udp 协议的接口Web 服务器要求系统有 http 协议的接口Web 客户端即为标准的浏览器软件。开发规范文件命能清楚的描述其功能。代码中的空格与空行上下保持一致。有适量且清楚的注释。界面整洁方便使用。所有函数及变量有能描述其功能的名字。应注意代码的简洁和优化。2.2 用例模型2.2.1 用例图2.2.2 [用例 1]详细描述用例编号1用例名称FTP 下载文件1 描述用户用 FTP 客户端从服务器上通过 TCP 协议下载一个文件用户用 FTP 客户端从服务器上通过 TCP 协议下载一个文件用户用 FTP 客户端从服务器上通过 TCP 协议下载一个文件2 参与者与关注点FTP 客户端用户希望能够得到快速地响应而且文件没有传输错误。FTP 服务器希望能够尽快完成客户端请求有个较好的吞吐量。FTP 客户端用户希望能够得到快速地响应而且文件没有传输错误。FTP 服务器希望能够尽快完成客户端请求有个较好的吞吐量。FTP 客户端用户希望能够得到快速地响应而且文件没有传输错误。FTP 服务器希望能够尽快完成客户端请求有个较好的吞吐量。3 事件流主成功场景或基本流程客户端要求建立和服务器建立用于控制对话的 TCP 连接。服务器响应要求并完成 3 次握手建立连接。客户端向服务器发送文件名。服务器接受文件名并建立用于传输的 TCP 连接。客户端从服务器通过该连接下载文件。传输完毕客户端断开与服务器的 TCP 连接。完成。主成功场景或基本流程客户端要求建立和服务器建立用于控制对话的 TCP 连接。服务器响应要求并完成 3 次握手建立连接。客户端向服务器发送文件名。服务器接受文件名并建立用于传输的 TCP 连接。客户端从服务器通过该连接下载文件。传输完毕客户端断开与服务器的 TCP 连接。完成。主成功场景或基本流程客户端要求建立和服务器建立用于控制对话的 TCP 连接。服务器响应要求并完成 3 次握手建立连接。客户端向服务器发送文件名。服务器接受文件名并建立用于传输的 TCP 连接。客户端从服务器通过该连接下载文件。传输完毕客户端断开与服务器的 TCP 连接。完成。3 事件流扩展或替代流程任意 TCP 连接建立失败服务器报错给服务器管理员管理员检查服务器状态是否异常。客户端报错给用户并退出。文件传输过程出错客户端报错给用户。用户重新使用客户端从服务器上下载文件或放弃下载。扩展或替代流程任意 TCP 连接建立失败服务器报错给服务器管理员管理员检查服务器状态是否异常。客户端报错给用户并退出。文件传输过程出错客户端报错给用户。用户重新使用客户端从服务器上下载文件或放弃下载。扩展或替代流程任意 TCP 连接建立失败服务器报错给服务器管理员管理员检查服务器状态是否异常。客户端报错给用户并退出。文件传输过程出错客户端报错给用户。用户重新使用客户端从服务器上下载文件或放弃下载。4 前置条件服务器已运行。服务器已运行。服务器已运行。2.2.3 [用例 2]详细描述用例编号2用例名称Web 浏览器查看网页1 描述用户用 Web 浏览器访问 Web 服务器的一个网页 用户用 Web 浏览器访问 Web 服务器的一个网页 用户用 Web 浏览器访问 Web 服务器的一个网页 2 参与者与关注点Web 浏览器用户希望得到快速的响应能够看到正确的网页。Web 服务器希望能够快速正确地完成浏览器请求并且能够处理多用户同时访问的场景。Web 浏览器用户希望得到快速的响应能够看到正确的网页。Web 服务器希望能够快速正确地完成浏览器请求并且能够处理多用户同时访问的场景。Web 浏览器用户希望得到快速的响应能够看到正确的网页。Web 服务器希望能够快速正确地完成浏览器请求并且能够处理多用户同时访问的场景。3 事件流主成功场景或基本流程1.用户在浏览器中输入要访问的网址。2. Web 服务器解析 HTTP 协议请求。3. Web 服务器处理该请求并通过 TCP 连接向浏览器返回目标网页 HTML 文件。4. 浏览器解析并显示该 HTML 文件。5. 用户看到该网页。6. 完成。主成功场景或基本流程1.用户在浏览器中输入要访问的网址。2. Web 服务器解析 HTTP 协议请求。3. Web 服务器处理该请求并通过 TCP 连接向浏览器返回目标网页 HTML 文件。4. 浏览器解析并显示该 HTML 文件。5. 用户看到该网页。6. 完成。主成功场景或基本流程1.用户在浏览器中输入要访问的网址。2. Web 服务器解析 HTTP 协议请求。3. Web 服务器处理该请求并通过 TCP 连接向浏览器返回目标网页 HTML 文件。4. 浏览器解析并显示该 HTML 文件。5. 用户看到该网页。6. 完成。3 事件流扩展或替代流程传递网页的 TCP 连接建立失败 Web 服务器报错给服务器管理员管理员检查服务器状态是否异常。Web 服务器没有响应浏览器无法连接到服务器 检查 Web 服务器是否已经运行、网址是否输入正确。扩展或替代流程传递网页的 TCP 连接建立失败 Web 服务器报错给服务器管理员管理员检查服务器状态是否异常。Web 服务器没有响应浏览器无法连接到服务器 检查 Web 服务器是否已经运行、网址是否输入正确。扩展或替代流程传递网页的 TCP 连接建立失败 Web 服务器报错给服务器管理员管理员检查服务器状态是否异常。Web 服务器没有响应浏览器无法连接到服务器 检查 Web 服务器是否已经运行、网址是否输入正确。4 前置条件Web 浏览器已运行。Web 浏览器已运行。Web 浏览器已运行。2.3 领域类图2.3.1 FTP(UDP)类图2.3.2 Web(TCP)类图2.3.3 FTP(UDP)核心顺序图2.3.4 Web(TCP)核心顺序图2.4 体系结构设计2.5 程序流程说明FTP 服务器FTP 客户端服务器流程建立 TCP 套接字获得与本服务器连接的客户端的套接字从客户端接收文件名若文件存在读取文件内容传给客户端结束若文件不存在告诉客户端文件不存在结束伪代码ServerSocket welcomeSocket new ServerSocket(portnumber); Socket connectionSocket welcomeSocket.accept(); BufferedReader infromClient connectionSocket.getInputStream(); DataOutputStream outToClient connectionSocket.getOutputStream();// ClientSentence infromClient.readLine(); File f new File(ClientSentence); RandomAccessFile in new RandomAccessFile(ClientSentence,r); String total ; try { while ((s in.readLine()) ! null) { total total s; } outToClient.writeBytes(total \n); in.close(); } catch (Exception e) { outToClient.writeBytes(File not exist.\n); }客户端流程建立 TCP 套接字与服务器连接读取用户输入将其传给服务器从服务器得到文件内容将其显示给用户关闭套接字伪代码Socket clientSocket new Socket(hostname,port );// DataOutputStream outToServer clientSocket.getOutputStream(); BufferedReader inFromServer clientSocket.getInputStream(); sentence inFromUser.readLine(); outToServer.writeBytes(sentence\n); modifiedSentence inFromServer.readLine(); System.out.println(FROM SERVER: modifiedSentence); clientSocket.close();结果图Web 服务器结果图2.6 系统物理架构一台电脑即可所有程序都在其上运行。四、系统测试4.1 单元测试FTP:4.2 HP QuickTest Professional 实验录制测试脚本后执行测试经常异常解决办法就是关掉其他运行的资源多试几次终于遇到成功的情况了。QTP 可以直接录制屏幕上的操作流程自动生成功能测试或者回归测试用例。专业的测试者也可以通过提供的内置脚本和调试环境来取得对测试和对象属性的完全控制。它具有行业领先的便于使用的特性以及支持提前配置环境的功能确保了快速的投资回报可独立运行也可以同惠普业务流程测试和惠普质量中心集成。它引进了新一代的“零配置”关键词驱动测试技术从而实现了快速建立测试、测试脚本更易维护和更强大的数据驱动能力为不同语言的应用测试提供统一代码支持在目标与 UniqueSmartObjectRecognition 之间建立联系即使目标的构件不断变化通过全面执行检查点获得完全合法的应用软件也能保证确定的却未被注意的脚本的执行快速隔离并诊断缺陷用一体化报告形式写出并以 XML 和 HTML 的形式输出利用自动化文档技术把测试文档和测试创建合并成为一个步骤通过集成的数据表(DataTable)可数据驱动任意对象、方式、检查点和输出值等。缺点就是对系统资源占用较多有时候会运行异常需要多次尝试。4.3 HP Loadrunner 实验准备测试结果分析可以看出在小规模下服务器是可以正确处理请求的。在不断提升用户数时服务器的响应时间也越来越长说明多线程能力在用户量大的时候服务器的压力还是很大的。资源下载地址https://download.csdn.net/download/sheziqiong/85706472资源下载地址https://download.csdn.net/download/sheziqiong/85706472