文件传输

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第3章设计文档3.1任务概述本项任务要开发一款P2P文件传输软件,该软件可以在局域网和互连上使用,具有文件传输,断点续传,多线程连接等功能。3.1.1开发背景随着网络的普及,在网络中交换信息,特别是文件成为使用网络时经常性工作,现有的文件传输工具如QQ、MSN等,主要功能是作为即时通讯工具使用,而且在局域网中使用时仍需连接到互连网。本文开发的软件基于P2P结构实现文件传输,不依靠服务器维护用户资料,所以,只要两台机器可以连通,就可以进行文件传输。3.1.2定义P2P:即peer-to-peer,可以理解为点对点,或对等传输的意思。3.1.3开发工具开发采用JAVA语言,开发工具为jbuilder20053.2文件传输业务流程3.2.1通讯顺序关系在文件传输时,传输过程可以简单的分为4步,如图:1、由文件发送者发起文件传输,他首先发送文件名,文件大小,验证消息等信息给文件接收者。2、文件接收者收到文件信息和发送者信息,决定是否接收,如不接收,则发送拒绝接收消息给文件发送者,文件传输结束。如同意接收,发送同意接收消息和文件传输起始字节(用于断点续传)给发送者。3、发送者开始发送文件数据包,直到最后一个文件数据包,发送者在最后一个文件数据包上加上标记。4、接收者识别最后一个文件数据包,文件传输成功。3.2.2文件发送端的详细业务流程图中显示了发送文件时的详细业务流程。1、首先,要选择要发送的文件,可以选择一个文件或同一个文件夹下的多个文件发送,当选择多个文件时,软件将为每个文件建立一个传输线程。选择文件后,发送者要填写目标IP和端口,由于是基于P2P的文件传输,不存在服务器维护好友列表,所以需要知道目标IP才能传输文件,用户也可以填写验证消息用于描述自己的身份和文件的介绍。2、发送者收到确认包,判断是否接收文件,如果不接收,则传输结束,如果接收,则打开要发送的文件,设置起始传输字节。3、发送者读取一个文件片段,加入是否是最后一个文件片段的标志,打包发给接收者。4、发送完最后一个文件片段时,文件传输结束。3.2.3文件接收者详细业务流程1、从一打开软件开始,监听线程就会启动,这时用户就扮演者文件接收者的角色,当有文件发送者发来请求时,监听线程建立与发送者的连接,并创建传输线程,接收者得到发送者传来的文件信息和验证消息,用户还能得到发送者的IP地址,用户根据这些信息决定是否接收文件,并发送确认包给发送者,确认包里包含了是否接收的标志,和开始传输的起始字节。2、接收者开始接收数据包,解包,写入文件中,直到最后一个文件片段,关闭文件,文件传输结束。3.3软件的传输协议设计为了更好的控制文件传输的流程,开发设计了文件传输协议,该协议属于应用层协议,为了不使传输过程过于复杂,协议尽量简单设计。主要的内容是传输包的格式。3.3.1传输包的格式其中传输包的类型有3种:PACKAGE_TYPE_FILENAME=0x01文件名包,该包用于文件发送者向接收者发送文件信息和验证消息PACKAGE_TYPE_CONTEXT=0x02文件内容包,该包用于传输文件内容PACKAGE_TYPE_CONFIRMRECEIVE=0x03文件传输确认包,该包用于文件接收者向发送者确认文件的接收3.3.2文件名包格式3.3.3文件传输包格式其中MORE_DATA用于确认是否是文件片段的最后一个包,以结束文件的传输。0表示没有数据,1表示还有数据。3.3.4文件接受确认包格式其中CONFIRM_FLAG表示是否确认文件接收,1表示接收,0表示不接收,当接收时,OFF表示文件传输的起始字节,用来实现断点续传。3.4文件传输的状态机文件传输线程的地层其实就是一个状态转换机,线程具有几个状态,线程从文件名传输状态开始,根据文件传输的不同情况,在各个状态间转换,直到传输成功或传输失败。FILE_TRANS_STATUS_FILENAME=0x01文件名称传输状态,文件传输刚建立连接时,传输状态处于文件名传输状态FILE_TRANS_STATUS_CONTEXT=0x02文件内容传输转台,在传输文件内容时,传输状态属于该状态FILE_TRANS_STATUS_WAITFORCONFIRM=0x03等待确认状态,文件发送者,发送完文件信息和验证消息后,处于该状态,文件接收者接收到文件信息和验证消息后处于该状态FILE_TRANS_STATUS_SUCCESS=0x04文件传输成功状态,表示文件已成功传输完毕FILE_TRANS_STATUS_FAIL=0x05文件传输失败状态,表示文件传输已经失败,失败原因可能是对方取消了文件传输或网络错误3.5结构设计软件主要由MainFrame,TransFileManager,SocketThread,Server,TransFilePanel五个类构成图表示了这几个类之间的关系。类功能介绍MainFrameMainFrame类是软件的主界面类,负责与用户的交互。TransFileManagerTransFileManager类是文件传输的控制类,负责管理文件的传输,它维护一个传输线程(SocketThread)的列表,每个线程都表示一个正在传输的任务。TransFileManager类定时的扫描各个线程的状态,根据不同状态做出不同处理,如计算传输速度,显示传输进度等。SocketThreadSocketThread类是文件传输线程类,它负责底层的具体传输工作,包括打包与解包,并且转换自己的状态,完成文件的传输。ServerServer类是为TransFileManager类使用的,它负责本地端口的监听,一旦有用户连接,TransFileManager就创建一个传输线程,放入线程列表。而它继续监听端口。TransFilePanelTransFilePanel是一个面板,它用有按钮、进度条,标签等用来显示文件的传输状态。3.6类设计3.6.1MainFrame该类是视图类,是软件的主界面。成员变量:contentPanecontentPane是JPanel类的对象,是主界面的面板。jbtnSendjbtnSend是JButton类对象,点击它将打开文件传输对话框。jbtnSettingjbtnSetting是JButton类对象,点击它将打开设置对话框。jlblIPjlblIP是JLable类对象,它显示本机的IP地址,方便文件的传输。jtpTransFilejtpTransFile是JTabbedPane类对象,是选项卡控件,用于显示多个文件同时传输。tfmtfm是TransFileManager类对象,负责控制文件的传输。成员方法:jbtnSend_anctionPerformed()该方法为jbtnSend按钮的点击事件jbtnSetting_actionPerformed()该方法为jbtnSetting按钮的点击事件This_windowClosed()该方法为窗口关闭事件界面截图:3.6.2TransFileManager类该类负责传输过程中对各个传输线程的检测与控制。成员变量:jtpjtp是选项卡控件对象,是MainFrame类中jtpTransFile对象的一个引用。panelistpaneList是ArrayList类对象,它是一个链表结构,存储使用的选项卡。runningrunning是一个boolean型的对象,用来表示线程是否在执行。ss是Server类的对象,用来坚听本地端口,等待用户的连接。threadListthreadList是ArrayList类对象,它是一个链表结构,存储使用的传输线程。maxThreadNummaxTreadNum是整型变量,表示最大允许的线程数。portport是整型变量,表示使用的端口号。成员方法:close()该方法用于关闭文件传输的控制。sendFile()该方法用于建立一个文件发送,要求输入参数为,目标IP,端口号,要发送的文件和验证消息。3.6.3SocketThread类SocketThread类是文件传输的底层支持类,它提供文件传输的服务。成员变量:sendBufsendBuf是一个字节型数据,它是文件发送和接收时的缓冲区。disdis是DataInputStream型对象,它是由Socket对象得到的输入流。dosdos是DataOutputStream型对象,它是由Socket对象得到的输出流。fDisfDis是DataInputStream型对象,它是要发送的文件的输入流。rafraf是RandomAccessFile型对象,该对象允许设置输出流的位置,以支持断点续传。runningrunning是一个boolean型对象,用来表示线程是否在执行。serverNameserverName是字符串型对象,表示服务器的地址,该对象只有在线程作为发送者时使用。errorMessageerrorMessage是字符串型对象,表示出错的信息。fileNamefileName是字符串型对象,表示文件名。fileSenderfileSender是一个boolean型对象,表示是文件发送者还是文件接收者。IPIP是字符串型对象,用来存放目的机的IP地址。messagemessage是字符串型对象,用来表示验证信息。portport是整型变量,表示连接的端口号。transFileLengthtransFileLength是长整型变量,表示已经传输的文件长度,TransFileManager可以用它来计算传输进度和传输速度成员方法:cancelTrans()该方法用于取消传输confirmReceiveFile()该方法用于确认传输文件参数flag用来表示是否同意传输参数fileName用来表示保存的文件参数off用来表示起始传输字节getFileTransMessage()该方法用于得到文件传输的基本信息。如:文件发送的目标,端口号等。getStatus()该方法返回一个整型变量,表示当前线程的传输状态。run()线程的执行方法,该方法中循环执行发送或接收方法,完成文件的发送或接收。setError()该方法通过一个字符串型的参数设置错误信息。stopThread()该方法用于停止线程的执行。doPackage()打包方法,该方法中,根据线程所处的不同状态,对数据加入不同的包头和其他信息,进行打包。readFromFile()该方法从要发送的文件中读取一个整型数。readFromSocket()该方法从Socket输入流读取一个整型数,它有一个重载版本读取一个字节数组的数据。receiveFile()该方法为接收文件的方法,是线程循环中,文件接收者执行的方法。sendFile()该方法为发送文件方法,是线程循环中,文件发送者执行的方法。writeToFile()该方法写一个字节数据的数据到保存的文件中。writeToSocket()该方法写数据到Socket输出流中,它有三个重载版本,分别是写入整型数,写入长整型数和写入字节数组数据。3.6.3TransFilePanel类这个类属于视图类,它作为主界面上的一个对象使用,含有进度条,按钮,标签的对象,用于显示文件传输状态,每一个传输线程都拥有自己的TransFilePanel类对象。成员变量:fileNamefileName是一个字符串,表示传输文件的文件名。fileSenderfileSender是boolean型对象,表示是文件发送者还是接收者。isCanneledisCanneled是boolean型对象,传输过程中,用户点了取消按钮后,该标志位置true,TransFileManager会循环检测isCanneled标志,当发现其为true后,它会关闭对应的传输线程,而对方会检测到传输错误,文件传输就停止了。isClosedisClosed是boolean型对象,它表示当传输过程已经停止时,用户点击了关闭按钮,TransFileManager检测到isClosed为true时,会在列表中去掉对应的传输线程和Tran

1 / 23
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功