




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、基于C#的FTP客户端实现实验课程:C期末大作业学生姓名:学号:专业班级:指导老师:完成日期:2014年12月20日 目 录摘要1引言11。 FTP协议分析11。1。 FTP的工作原理11。2。 FTP工作模式21。3。 FTP传输模式42。 FTP客户端总体设计52.1。 设计目的及开发环境52.1.1. 设计目的与.NET环境简介52.1.3。 FtpWebRequest 类62。2。 系统UML分析62。2.1。 FTP客户端用例图62.2.2。 FTP客户端主要序列图与活动图82。2。4. FTP客户端类图122。3. 系统功能模块152。3.1。 系统整体框架图152.3.2。 客户
2、端功能模块152.3。3. 客户端界面设计162。4. 数据流程图192.4.1。 客户端连接流程图192。4.2。 上传子模块流程图212.4。3。 下载子模块流程图223。 FTP客户端程序实现233.1. WPF界面设计233。1。1. 首页界面详细设计233。1.2. 文件传输界面详细设计243。1.3。 操作历史记录显示界面详细设计263.1。4. 常用地址查询模块设计263.2。 功能模块实现273。2.1。 连接服务器273。2.2. 显示服务器端文件清单283.2。3. 上传文件293。2。4。 下载文件293。2。5。 查询历史记录303。2。6。 常用地址管理314. 数据
3、库建设314。1。 数据库表结构314。2。 数据库关系模型324.3. 数据库ER图334。4. 数据库建表语句335。 结语34参考文献3531基于C的FTP客户端设计与实现图 1Error! Bookmark not defined.FTP工作模式图 上图中用户PI开始控制连接,控制连接与Telnet协议很象.在开始阶段,标准FTP命令由用户PI产生并通图 1Error! Bookmark not defined.过控制连接传送到服务器进程。服务器PI向用户PI返回标准应答。FTP命令指定数据连接参数和文件系统操作。用户DTP在特定数据端口侦听,服务器开始数据连接并以指定的参数开始数据传
4、输.数据端口不必在开始FTP命令的机器上,但用户或用户FTP进程必须确定它在指定的数据端口上侦听。这个数据连接是全双工的。1. FTP客户端总体设计1.1. 设计目的及开发环境1.1.1. 设计目的 FTP早已应用在网络的各个方面,比如我们在访问网络上的资源时,经常会遇到需要连接FTP服务器来下载,或者你制作了一个网站,想要将其上传至服务器,让大家能够访问它,这个时候就会用到FTP客户端.虽然平时使用windows自带的IE浏览器即可实现对FTP服务器的访问,但是IE只是个很粗糙的FTP客户端。IE浏览器在6。0以下的版本不支持PASV方式访问服务器,而且IE浏览器在登录FTP服务器的时候,无
5、法查看返回的信息,在出错的时候,无法找到错误的原因,因此在使用上很不方便。现在大多数的FTP客户端软件都是收费版的,而且以英文版居多,使用上操作很复杂,目前流行的有CoreFtp、AceFtp、FtpVoyager等,但是大多数用户并不习惯使用这些软件。本文所设计的FTP客户端则适合大多数用户使用,界面设计的很简单,使用户可以一目了然,而且具备FTP客户端的基本功能,可以作为下载、上传文件的工具来使用。1.1.2. NET环境简介 Visual StudioNET是一个开发和运行软件的新环境,便于开发基于网络的服务,拥有丰富的运行库,支持多种编程语言编写的组件,具有跨语言平台的互操作能力。C#
6、是NET平台中最重要的语言,它本身没有类库,而是使用NET框架所提供的统一类库,用户也可以定义特定域的属性,并将它们应用于任何语言元素如类、接口等,所以对网络应用程序提供完整的支援,这使得程序员能够在新的微软NET平台上快速开发出种类丰富的应用程序。1.1.3. FtpWebRequest 类C。NET类库的存在使它适合于一个不断发展的环境。在类库中我们可以自由地加入新的方法和实例变量而不会影响用户程序的执行。NET平台封装了实现FTP功能的一些基础类,位于命名空间为SystemNet下的FtpWebRequest类用于实现文件传输协议(FTP)客户端的一些基本功能。二次封装了类FFP_Cla
7、ss,其成员包括string tipserveriP (服务器地址)、string ftpUseriD(登陆账号)、string ftpPassword (登录密码)和FtpWebRequest reqFTP.本文所使用的FtpWebRequest类的构造方法和主要方法如下:FtpWebRequest reqFtp = (FtpWebRequest)FtpWebRequest.Create(newUri(Path);此构造函数利用给出的主机名建立一条FTP连接,目的连接地址为Path所指定的地址,并建立URI对象。reqFtp.UseBinary = true;这条程序指定传输类型为Binar
8、y. reqFtp。Credentials = newNetworkCredential(ftpUserId, ftpPassword);此方法利用参数ftpUserId和ftpPassword登录到FTP服务器。使用过Internet的用户应该知道,匿名FTP服务器的登录用户名为anonymous,密码一般用自己的电子邮件地址.1.2. 系统UML分析1.2.1. FTP客户端用例图1) 0层用例图图 1-1 0层用例图用户通过Ftp客户端系统进行文件传输.2) 1层用例图图 1Error! Bookmark not defined. 1层用例图在Ftp客户端系统中,主要包括六个用例,分别是
9、列出服务器端文件列表(ListServerFile)、从服务器端下载文件(DownLoadFile)、向服务器端上传文件(UpLoadFile)、列出历史记录(ListHistory)、对常用地址的操作(OpeatUsefulAddress)和输入用户登录信息(EnterUserInfo)。其中,每一个用例都包含EnterUserInfo用例,列出服务器文件列表(ListServerFile)用例扩展了下载文件(DownLoadFile)用例。3) 二层用例图a. ListServerFileList子用例图.图 1Error! Bookmark not defined. 2层用例图ListS
10、erverFileList用例包含了两个子用例,分别为列出服务器端文件列表(ShowServerFileList)、打开目录(ChangeDirectory)。打开目录用例指的是打开服务器端子目录,获取子目录。b. OperatUsefulAddress子用例图。图 1-Error! Bookmark not defined. OperatUsefulAddress子用例图OperatUsefulAddress用例包含了两个子用例图,分别为显示常用的ftp服务器端地址(ShowUserfulAddress)、添加常用的服务器地址(AddUsefulAddress)。1.2.2. FTP客户端主
11、要序列图1) ShowServerFileList序列图图 1-Error! Bookmark not defined. ShowServerFileList序列图2) ChangeDirectory序列图图 1-Error! Bookmark not defined. ChangeDirectory序列图3) DownLoadFile序列图图 1Error! Bookmark not defined. DownLoadFile序列图4) UpLoadFile序列图图 1-Error! Bookmark not defined. UpLoadFile序列图5) ListHistory序列图图
12、12 ListHistory序列图6) AddUsefulAddress序列图图 1-3 AddUsefulAddress序列图1.2.3. FTP客户端主要活动图1) DownLoadFile活动图图 14 DownLoadFile活动图2) UpLoadFile活动图图 1-5 UpLoadFile活动图1.2.4. FTP客户端类图1) 类关系图图 16 FTP客户端类图2) 边界类IndexPage、DownLoadPage、HisetoryPage、UsefulAddressPage图 1Error! Bookmark not defined. 边界类客户端中的主要边界类是显示各功能
13、模块的页面,包括显示主页的IndexPage,显示下载界面的DownLoadPage,显示历史记录的HistoryPage,显示常用地址的UsefulAddressPage。用于与用户的交互,获取用户输入的信息,显示信息。3) 控制类-DataBaseHander图 1Error! Bookmark not defined. 控制类-DataBaseHande控制类DataBaseHande,封装了对于数据库的操作,是数据库操作类,包括的方法有:插入历史记录(InsertHistory)查找历史记录(selectHistory)插入常用地址(InsertUsefulAddr)查找常用地址(se
14、lectUsefulAddr)删除常用地址(DeleteUsefulAddr)系统通过调用该类对象的该类方法实现对数据库的操作。4) 控制类-FtpHander图 1Error! Bookmark not defined. 控制类-FtpHander控制类FtpHander,封装了对于Ftp文件传输的操作,包括的方法有:连接Ftp客户端(connect)获取服务器端文件目录(getServerFileList)上传文件(UpLoadFile)下载文件(DownLoadFile)通过该类实现对于文件的操作和服务器的连接和方法请求。5) 控制类LocalHander图 1Error! Bookma
15、rk not defined. 控制类LocalHander控制类LocalHander,封装了对于本地路径的操作,包括的方法有:获取本地目录下的文件列表(GetLocalFileList)客户端通过该类实现对本地文件的操作。6) 角色类-FtpAddr图 1-Error! Bookmark not defined. 角色类FtpAddr角色类FtpAddr,表示Ftp服务器端的抽象类。属性:Ftp服务器端名称(FtpName)string型Ftp服务器端地址(FtpAddress)string型方法:获取服务器端名称(getFtpName)设置服务器端名称(setFtpName)获取服务器端
16、IP地址(getFtpIPaddr)设置服务器端IP地址(setFtpIPaddr)7) 角色类FileName图 1Error! Bookmark not defined. 7)角色类-FileName角色类FileName,表示文件的抽象类。属性:文件名称(name)string型文件大小(size)string型方法:获取文件名称(getName)设置文件名称(setName)获取文件大小(getSize)设置文件大小(setSize)1.3. 系统功能模块1.3.1. 系统整体框架图图 1Error! Bookmark not defined. 系统整体框架图1.3.2. 客户端功能模
17、块 FTP客户端作为用户连接FTP服务器的工具,需要具备一些基本功能模块,如连接、上传、下载等,其中最主要的五大功能模块如下:1. 下载功能模块:连接用户指定的FTP服务器,获取服务器目录下的文件列表,当用户选择项目为文件时,点击下载可以下载用户所需要的文件.选定文件后提示用户将文件存储在何处,用户选择存储区后开始下载任务。依靠FTP协议的支持,用户下载的文件没有类型和大小限制,即用户可已选择任何自己想要下载的文件,通过FTP客户端进行下载。2. 上传功能模块:用户可以自行选择本机上存储的文件,上传至FTP服务器。在用户选择存储在服务器的位置后,点击上传,选择所需要上传的文件,即可将文件上传至
18、服务器.3. 连接功能模块:将用户本机与指定的IP地址连接,验证用户命和密码,在FTP服务器上进行注册。4. 显示服务器文件模块:显示ftp服务器端的文件列表,包括切换服务器目录功能。图 17 显示服务器文件模块5. 显示历史记录模块:列出以往的操作记录,方便用户查询所下载的文件信息。6. 常用地址操作模块:包括查询常用地址和增加常用地址两个功能。图 1-Error! Bookmark not defined. 常用地址操作模块有了这六个基本的功能模块,客户端的基本应用功能即可实现。1.3.3. 客户端界面设计为了使用户能够方便的使用FTP客户端,在设计中我将数据输入和信息显示整合在一个页面中
19、,全部客户端仅包含一个主要的窗口,窗口中有4个WPF页分别包括以下四个主要页界面:1、 首页:用户打开软件所见到的的界面。图 1Error! Bookmark not defined. 首页2、 文件传输界面:文件传输界面分为三层结构,第一层为用户下载地址输入层,第二层为目标FTP服务器端文件列表,第三层为本地下载路径中的文件列表。图 1-Error! Bookmark not defined. 文件传输界面3、 历史记录查询界面:从数据库中读取用户的操作历史记录,让用户查询曾经下载的文件信息.图 18 历史记录查询界面4、 常用地址界面,列出常用的ftp服务器地址,方便用户使用,并提供自行添
20、加地址的功能。图 1Error! Bookmark not defined. 常用地址界面1.4. 数据流程图1.4.1. 客户端连接流程图运行客户端后,首先是连接服务器,需要输入服务器IP地址点击连接按钮后开始连接服务器.下图为客户端连接流程图.图 1Error! Bookmark not defined. 客户端连接流程图连接的结果有两种,即图中显示的连接失败和连接成功.1.4.2. 上传子模块流程图 当用户点击上传按钮后,用户可以选择需要上传的文件,将本机上的文件上传至FTP服务器。下图为上传子模块流程图。图 1-Error! Bookmark not defined. 上传模块流程图上
21、传的结果有两种,上传失败和成功,失败时会提示用户上传失败,原因可能是权限,如果成功上传,则提示上传成功.1.4.3. 下载子模块流程图当用户在服务器文件列表中选择想要下载的文件后,选择需要下载文件在本机上的存储位置,将服务器上的文件下载至本机。下图为上传子模块流程图.图 1Error! Bookmark not defined. 下载模块流程图2. FTP客户端程序实现2.1. WPF界面设计2.1.1. 首页界面详细设计首页左侧有四个按钮连接到不同功能的WPF页,主要界面为欢迎界面,用户可以通过点击按钮选择需要的功能.通过datagrid来布局整个页面。主要Wpf设计代码:Grid>G
22、rid。RowDefinitions<RowDefinition Height="70” /<RowDefinition /Grid。RowDefinitions><!-上半部分导航页面->StackPanel Grid。Row=”0" Background=”LightBlue”Label Height=”70” Content="CHEN'S FTP客户端” FontWeight="Bold" FontSize=”35" HorizontalContentAlignment=”Center”
23、Panel。ZIndex=”0" /</StackPanel<!-下半部分主题界面<Grid Grid。Row=”1” Grid.Column=”0” >Grid。ColumnDefinitionsColumnDefinition Width=”190” /ColumnDefinition /Grid。ColumnDefinitions><StackPanel Background="LightGray" Grid.Row=”0" Grid.Column=”0”>!四个按钮>Button Name=”btn
24、Index” Height=”50" Width=”190" Background=”LightCoral" Content="首页” MouseEnter=”Button_MouseEnter” Click=”Button_Click” MouseLeave=”Button_MouseLeave" MouseDown=”Button_MouseDown" MouseUp=”Button_MouseUp” /Button Name=”btnDownload" Height="50” Width="190&
25、quot; Background=”LightCoral" Content=”文件传输” BorderBrush=”LightCoral” MouseEnter=”Button_MouseEnter” Click="Button_Click” MouseLeave=”Button_MouseLeave" MouseDown=”Button_MouseDown” MouseUp="Button_MouseUp” /<Button Name="btnHistory” Height=”50" Width=”190” Backgroun
26、d=”LightCoral” Content=”历史记录" MouseEnter="Button_MouseEnter" Click=”Button_Click” MouseLeave=”Button_MouseLeave” MouseDown=”Button_MouseDown” MouseUp=”Button_MouseUp” /><Button Name=”btnAddress" Height=”50" Width="190” Background="LightCoral” Content="常用
27、地址查询” MouseEnter="Button_MouseEnter" Click="Button_Click” MouseLeave=”Button_MouseLeave" MouseDown=”Button_MouseDown” MouseUp=”Button_MouseUp" /StackPanel<StackPanel Name="Frame” Grid。Row=”0" Grid。Column="1" ><Frame x:Name="framePage” Naviga
28、tionUIVisibility=”Hidden" Source="PageWelcome。xaml” Background=”AliceBlue” Width=”588” Height=”492"/Frame/StackPanel></Grid</Grid2.1.2. 文件传输界面详细设计文件传输界面分为三层结构,第一层为用户下载地址输入层,第二层为目标FTP服务器端文件列表,第三层为本地下载路径中的文件列表。通过Grid将整个页面分为三行,每一行嵌入一个stackpanel,并在第一行再次用Grid布局将第一行分为三列,第一列放提示信息用的l
29、abel,第二列放输入用的inputtex,第三列放一个button控件.页面结构wpf代码:<Grid><Grid。RowDefinitions>RowDefinition Height=”300" /RowDefinition /</Grid。RowDefinitions>!-服务器界面-StackPanel Grid.Row="0” Background="AliceBlue”Grid Grid。RowDefinitionsRowDefinition Height="30" /<RowDefini
30、tion /></Grid。RowDefinitions<Grid。ColumnDefinitions<ColumnDefinition Width="100"/ColumnDefinition Width=”300"/ColumnDefinition/Grid.ColumnDefinitions>/Grid </StackPanel </Grid第一层用来记录用来输入服务器的站点,用户名和密码信息,然后将信息发送到服务器进行验证,利用inputBox控件来实现。在程序运行时,用户在输入框url中输入的FTP服务器站点。利
31、用点击按钮触发onClick事件获取输入框中的数据,将url中的数据存储至path变量 中,将username中的数据存储至username中;Wpf设计代码:Label Grid。Row=”0” Grid.Column="0” Content="下载地址:” HorizontalAlignment="Right” /TextBox Name=”txtServerPath" Grid。Row=”0" Grid.Column=”1”/Button Name=”btnServerSearch" Grid。Row=”0" Grid
32、。Column=”2” Width=”108" Content=”查询” Click="btnServerSearch_Click" /第二层的作用是是显示服务器文件列表,利用Datagrid控件来实现。在客户端主界面创建一个Datagrid,命名为gridServerFileList,并置于主界面中间,该表格包括三个数据项:文件名file,文件大小filesizes,修改日期filedates,使用一个ListFileNameserverFileList来存储这三个数据.当客户端连接上服务器时,表格数据自动更新,主要功能使用getServerfFileList(
33、)函数实现。当服务器连接切换到当前目录,通过对WebRequestMethods.Ftp的method赋值为ListDirectory并获取来自服务器端的应答流,读取应答流来实现。Wpf设计代码:<Border>DataGrid Grid。Column="1" Name=”gridServerFileList” Width="510” Height=”300” Background=”LightCyan" AutoGenerateColumns=”True” HorizontalScrollBarVisibility=”Visible&quo
34、t; VerticalScrollBarVisibility=”Visible” GridLinesVisibility="None” IsReadOnly=”True” MouseEnter=”gridFileList_MouseEnter" SelectionChanged=”gridFileList_SelectionChanged" MouseUp=”gridFileList_MouseUp” MouseDoubleClick=”gridFileList_MouseDoubleClick"</DataGrid/Border第三层的作用是是显
35、示本地文件列表,和第二层一样利用Datagrid控件来实现.在客户端主界面创建一个Datagrid,命名为localFileList,并置于主界面中间,该表格包括三个数据项:文件名file,文件大小filesizes,修改日期filedates,使用一个List<FileNamelocalFileList来存储这三个数据。当客户端连接上本地时,表格数据自动更新,主要功能使用getLocalFileList()函数实现。当服务器连接切换到当前目录,通过对调用GetLocalFileList()函数获取来自本地目录的应答流,读取应答流来实现。Wpf设计代码:StackPanel Grid。R
36、ow="1" Background=”AliceBlue">Border <DataGrid Name=”gridLocalFileList” Width="510" Height="130” Background=”LightCyan” AutoGenerateColumns=”True" HorizontalScrollBarVisibility="Visible” VerticalScrollBarVisibility=”Visible" GridLinesVisibility=”Non
37、e” IsReadOnly="True” MouseEnter=”gridFileList_MouseEnter” SelectionChanged=”gridFileList_SelectionChanged" MouseDoubleClick="gridFileList_MouseDoubleClick"</DataGrid/Border/StackPanel>2.1.3. 操作历史记录显示界面详细设计 这个模块是历史信息显示模块,使用datagrid控件实现。通过从数据库中读取数据,作为datagrid的数据源.Wpf设计代码:Grid
38、<DataGrid Name=”gridHistory" AutoGenerateColumns=”True” HorizontalScrollBarVisibility="Visible” Height=”430” HorizontalAlignment=”Center” VerticalAlignment=”Center” Width="510" /Grid2.1.4. 常用地址查询模块设计此模块主要存储常用的一些ftp服务器地址方便用户下载资源,用户也可以通过添加按钮添加地址。此模块主要分为两层,上层为信息输入模块,通过一个提示lable,两
39、个输入框inputTex和一个button控件来获取用户输入的服务器端信息。Wpf布局代码:Grid<Grid。RowDefinitions>RowDefinition Height=”70” /RowDefinition /></Grid。RowDefinitionsStackPanel Grid.Row=”0” Grid。Column="0”><GridGrid。ColumnDefinitions><ColumnDefinition Width="108*” /<ColumnDefinition Width=”156
40、” /ColumnDefinition Width=”160" /ColumnDefinition Width="86” />/Grid.ColumnDefinitions></grid上层设计代码:Label Content="添加常用地址:” HorizontalAlignment="Right” Width=”88” /TextBox Name=”tbFtpName" Grid.Column=”1” Height=”20” Text=”请输入ftp服务端名称:” Margin="6,3,0,3” GotFocu
41、s=”TextBox_GotFocus” LostFocus="TextBox_LostFocus” /TextBox Name=”tbIpAddr” Grid。Column=”2” Height=”20” Text=”请输入IP地址:" Margin="6,3,0,3" GotFocus=”TextBox_GotFocus” LostFocus=”TextBox_LostFocus” /Button Name="btnAdd” Grid.Column=”3” Width=”50" Height=”20" Content=”
42、添加” Click=”btnAdd_Click" />下层设计代码:<StackPanel Grid。Row=”1" Grid。Column=”0"DataGrid Name="gridAddr” AutoGenerateColumns=”True" HorizontalScrollBarVisibility=”Visible” Height=”360” Width=”510” HorizontalAlignment=”Center" VerticalAlignment="Bottom" Selecti
43、onChanged=”gridAddr_SelectionChanged” MouseRightButtonUp="gridAddr_MouseRightButtonUp”/></StackPanel2.2. 功能模块实现2.2.1. 连接服务器客户端中FtpHander类中connect方法用来实现连接服务器功能,在C#。NET中实现这一功能是借助FtpWebRequest类完成的,首先是使用FtpWebRequest类的(FtpWebRequest)FtpWebRequest。Create(new Uri(Path);方法打开远程FTP服务器,然后使用FtpWebRe
44、quest类的NetworkCredential(ftpUserId, ftpPassword);方法登录服务器。登录远程FTP服务器有两种方式,一种是注册用户登录,另一种是以匿名方式登录。使用第一种方式登录需要拥有该服务器的注册用户名和密码,匿名方式则是以anonymous作为用户名来登录.类FtpWebRequest提供了如下两个可用于打开与FTP服务器之间的连接的方法1. FtpWebRequest。Create(newUri(Path)用于创建与ftp服务器端连接的对象。2. reqFtp。UseBinary = true;用于指定数据传输类型3. reqFtp。Credentials
45、 = new NetworkCredential(ftpUserId, ftpPassword);用于建立一条与指定主机、指定端口上的FTP服务器的连接。本文所使用的是第一种方法进行连接,首先定义4个字符串,命名为username,password,分别用来接收来自数据输入界面的数据.然后将接收到的数据发送至服务器验证,验证成功则使用对话框函数在信息显示界面中提示连接成功,失败则显示连接失败.核心代码如下:reqFtp = (FtpWebRequest)FtpWebRequest。Create(newUri(Path));/创建对象 reqFtp。UseBinary = true;/指定传输类
46、型 reqFtp。Credentials = newNetworkCredential(ftpUserId, ftpPassword);/登录2.2.2. 显示服务器端文件清单客户端中实现显示服务器端的文件为FtpHander类中的GetServerFileList(DataGrid gridServerFileList,string path)函数来实现.当用户选择文件下载时,客户端会创建一个到FTP服务器的连接,同样使用FtpWebRequest类的FtpWebRequest.Create(newUri(Path)方法和reqFtp。Credentials = newNetworkCred
47、ential(ftpUserId, ftpPassword);操作登录到服务器,把传输格式设置为二 进 制 格 式 , 向服务器发送reqFtp。Method = WebRequestMethods。Ftp。ListDirectory;操作获取文件列表,利用服务器FtpWebRequest对象的GetRequestStream ()方法获取服务器端传输过来的数据流,将流中数据写入数组缓存中,并利用streamreader对象读出文件列表的内容放入serverFileList中作为datagrid的数据源显示在datagrid中。核心代码如下:reqFtp。Method = WebRequest
48、Methods.Ftp.ListDirectory;WebResponse response = reqFtp。GetResponse();StreamReader reader = newStreamReader(response。GetResponseStream());string line = reader。ReadLine();while (line != null) FileName fn = newFileName(line); serverFileList。Add(fn); line = reader.ReadLine(); /获取文件大小for (int i = 0; i s
49、erverFileList。Count; i+) try Connect(path + "/” + serverFileL); reqFtp。Method = WebRequestMethods。Ftp。GetFileSize; response = reqFtp.GetResponse();long fileSize = response。ContentLength; serverFileListi.size = fileSize。ToString(); catch(Exception) serverFileListi。size = ”文件夹”;continue;
50、 gridServerFileList。ItemsSource = serverFileList;2.2.3. 上传文件客户端中实现上传功能的文件为FtpHander类中的uploadFile函数来实现。当用户选择文件上传时,客户端会创建一个到FTP服务器的连接,同样使用FtpWebRequest类的FtpWebRequest。Create(newUri(Path))方法和reqFtp。Credentials = newNetworkCredential(ftpUserId, ftpPassword);操作登录到服务器,把传输格式设置为二 进 制 格 式 , 利用要上传的本地文件构造Filel
51、nfo对象,连接服务器,设置Method属性,通知服务器FtpWebRequest对象的GetRequestStream ()方法创建文件写入流,将缓冲中的内容写入流中,并上传到服务器。文件大小,然后利用缓冲和文件流读取文件内容,通过FtpWebRequest将 本 地 文 件 上 传 至FTP 服 务 器 。上 传 结 束 后 关闭数据流,一般情况下FTP服务器为了保证其安全性,权限中会设置是否允许用户上传文件.上传失败时,出错处理会在对话框面板中显示出文件上传失败.上传的具体代码见附录.核心代码如下: Connect(url); reqFtp。KeepAlive = false; reqF
52、tp。Method = WebRequestMethods.Ftp.UploadFile;/文件上传请求 reqFtp。ContentLength = fileinfo。Length;int buffLength = 2048;byte buff = newbytebuffLength;int contentLen;FileStream fs = fileinfo。OpenRead();/打开文件流读上传的文件Stream stream = reqFtp。GetRequestStream(); /把上传的文件写入流 contentLen = fs.Read(buff, 0, buffLengt
53、h);while( contentLen != 0 ) stream。Write( buff,0,buffLength ); contentLen = fs。Read(buff, 0, buffLength); stream。Close(); fs.Close();2.2.4. 下载文件客户端下载文件由为FtpHander类中的downloadFile函数来实现。如果用户想要下载列表中的某一个文件,首先判断项目的类型是否是文件,如果是文件,则得到下载的文件名并下载文件,如果选中的是目录,则不能下载.用户选择好要下载的文件后,客户端打开服务器连接端口,使用FtpWebRequest类的FtpWe
54、bRequest.Create(newUri(Path)方法和reqFtp.Credentials = newNetworkCredential(ftpUserId, ftpPassword);操作登录到服务器,把传输格式设置为二进制格式,使用ftpClient。get()函数获得文件名,下载并保存至用户指定的路径。下载完成后ftpClient。closeServer()关闭与服务器的连接并清除线程.当用户下载失败时,出错处理会在信息显示面板中显示下载出错.下载的具体代码见附录。Connect(path + serverDirectory + ”/” + serverfileName); re
55、qFtp。Method = WebRequestMethods.Ftp。DownloadFile;/文件下载请求FtpWebResponse response;Tryresponse = (FtpWebResponse)reqFtp。GetResponse();/获得服务器端响应catch (Exception)MessageBox.Show(serverfileName + ”是目录!不可以下载!”);return;Stream ftpStream =response。GetResponseStream ();cl =response。ContentLength; /获取文件大小int bufferSize=2048;/ 设置缓冲byte buffer=newbytebufferSize;readcount=ftpStream。Read(buffer,0,bufferSize);FileStream fs = newFileStream(downLoadFile, FileMode.OpenOrCreate, FileAccess。Write);BinaryWriter rw = newBinaryWriter(fs, Encoding。Default); /将文件通过二进制流下载while (readcount0) rw。Wr
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 互联网平台服务合作协议
- 项目管理中的经济数据分析方法试题及答案
- 2025年市政工程环境评估试题及答案
- 分类汇编试题及答案
- 水利水电工程试题及答案详解
- 制胜关键的市政工程试题及答案
- 市政工程课程设置试题及答案
- 水利水电工程在国际合作中的角色及试题及答案
- 过期租房合同后果
- 课程材料采购合同
- 实验 验证牛顿第二定律
- 钻孔水文地质工程地质综合编录一览表模板
- 备用柴油发电机定期启动试验记录表
- 国企食堂运作方案
- 二年级上册心理健康教育说课稿-面对批评 全国通用
- 工程管理检讨书
- 劳务派遣合同示范文本(4篇)
- 2023年广西贺州中考语文真题及答案
- 押运员岗位职责
- 2008年安徽省中考英语试卷及答案
- 眼动的检查与训练
评论
0/150
提交评论