网络程序课程设计FTP客户端.docx

上传人:b****8 文档编号:29222404 上传时间:2023-07-21 格式:DOCX 页数:23 大小:344.46KB
下载 相关 举报
网络程序课程设计FTP客户端.docx_第1页
第1页 / 共23页
网络程序课程设计FTP客户端.docx_第2页
第2页 / 共23页
网络程序课程设计FTP客户端.docx_第3页
第3页 / 共23页
网络程序课程设计FTP客户端.docx_第4页
第4页 / 共23页
网络程序课程设计FTP客户端.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

网络程序课程设计FTP客户端.docx

《网络程序课程设计FTP客户端.docx》由会员分享,可在线阅读,更多相关《网络程序课程设计FTP客户端.docx(23页珍藏版)》请在冰豆网上搜索。

网络程序课程设计FTP客户端.docx

网络程序课程设计FTP客户端

河南理工大学

万方科技学院

课程设计报告

2015—2016学年第二学期

 

课程名称计算机网络

设计题目使用.NET技术编写FTP客户端

姓名

学号1516353004

专业班级计科15升-1班

指导教师李静

2016年06月23日

目录

1课题任务及要求1

1.1课题任务及要求1

2组员任务分工2

2.1组员任务及分工2

4课题相关算法及实现步骤4

4.1用户登录服务器,列表更新4

4.2双击事件功能的实现6

4.3登录失败获得服务器的响应信息7

4.4删除指定文件及文件夹8

4.5浏览上传文件9

4.6上传文件9

4.7下载文件11

4.8实现步骤13

5实现功能及操作简介14

5.1连接服务器14

5.2服务器响应信息14

5.3浏览14

5.4上传15

5.5下载15

5.6删除16

5.7进入目录和返回上级目录16

5.8退出16

6实验结果及分析17

6.1用户登录结果17

6.2服务器响应信息结果17

6.3浏览结果18

6.4上传结果18

6.5下载结果19

6.6删除结果20

6.7进入目录及返回上级目录结果21

6.8退出21

7心得体会22

8参考文献23

1课题任务及要求

1.1课题任务及要求

课题:

使用.NET技术编写FTP客户端

设计要求:

FTP客户端:

(1)根据服务器的IP地址,用户名,密码登陆FTP服务器。

(2)客户端上显示服务器响应信息。

(3)登陆成功后,客户端上显示服务器FTP目录及文件(目录和文件显示加以区别)。

(4)用户双击目录后可以进入该目录中,也可以双击“返回上级目录”,返回到上层目录。

(5)用户将本地文件上传至FTP服务器,以及采用多线程技术从服务器上下载文件。

(6)实现删除服务器上指定的文件和文件夹。

课题组人数:

限1人。

2组员任务分工

2.1组员任务及分工

刘凡11303090122任务分工:

完成程序源码,编写实验文档和PPT

3相关知识简介

3.1FTP

FTP是FileTransferProtocol(文件传输协议)的英文简称,而中文简称为“文传协议”。

用于Internet上的控制文件的双向传输。

同时,它也是一个应用程序(Application)。

基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同一种协议以传输文件。

在FTP的使用当中,用户经常遇到两个概念:

"下载"(Download)和"上传"(Upload)。

"下载"文件就是从远程主机拷贝文件至自己的计算机上;"上传"文件就是将文件从自己的计算机中拷贝至远程主机上。

用Internet语言来说,用户可通过客户机程序向(从)远程主机上传(下载)文件。

3.2Serv-U软件

Serv-U是当前众多的FTP服务器软件之一。

通过使用Serv-U,用户能够将任何一台PC设置成一个FTP服务器,这样,用户或其他使用者就能够使用FTP协议,通过在同一网络上的任何一台PC与FTP服务器连接,进行文件或目录的复制,移动,创建,和删除等。

这里提到的FTP协议是专门被用来规定计算机之间进行文件传输的标准和规则,正是因为有了像FTP这样的专门协议,才使得人们能够通过不同类型的计算机,使用不同类型的操作系统,对不同类型的文件进行相互传递。

3.4相关FTP操作命令

FtpWebRequest类用于实现文件传输协议(Ftp)客户端的操作,用该类的Create方法初始化新的WebRequest对象,然后用该类的Method属性指定当前请求的命令是什么,这个值定义在结构体WebRequestMethods.ftp中,本次程序用到的命令有ListDirectoryDetails获取文件详细列表、DeleteFile删除文件、RemoveDirectory删除目录、DownloadFile下载文件、UploadFile上传文件等。

 

4课题相关算法及实现步骤

4.1用户登录服务器,列表更新

privatevoidbtnDenglu_Click(objectsender,EventArgse)

{

FileList="";

connect();

}

publicvoidconnect()

{

listBoxInfo.Items.Clear();

try

{

ftpServerIp=txtIp.Text;

ftpUserID=txtUsername.Text;

ftpPassword=txtPwd.Text;

req=(FtpWebRequest)FtpWebRequest.Create(newUri("ftp:

//"+ftpServerIp+"/"+FileList));

req.Credentials=newNetworkCredential(ftpUserID,ftpPassword);

req.KeepAlive=false;

req.Method=WebRequestMethods.Ftp.ListDirectoryDetails;

req.UseBinary=true;

FtpWebResponseresponse=GetFtpResponse(req);

listBoxInfo.Items.Add("服务器返回:

"+response.StatusDescription);

StreamReaderreader=newStreamReader(response.GetResponseStream());//

strings=reader.ReadToEnd();

string[]ftpDir=s.Split(Environment.NewLine.ToCharArray(),StringSplitOptions.RemoveEmptyEntries);

listBoxInfo.Items.AddRange(ftpDir);

listBoxInfo.Items.Add("服务器返回:

"+response.StatusDescription);

ftpFileBox.Items.Add("返回上级目录");

for(inti=0;i

{

string[]fileinfo=ftpDir[i].Split('');

stringtype=null;

stringfilename=fileinfo[fileinfo.Length-1];

if(filename=="."||filename=="..")

continue;

else

{

if(fileinfo[0].IndexOf('d')!

=-1)

type="<目录>";

else

type="<文件>";

ftpFileBox.Items.Add(type+""+filename);

}

}

reader.Close();

response.Close();

btnDenglu.Enabled=false;

}

catch(Exceptionex)

{

MessageBox.Show("登陆失败!

");

MessageBox.Show(ex.ToString());

}

}

4.2双击事件功能的实现

privatevoidftpFileBox_MouseDoubleClick(objectsender,MouseEventArgse)

{

try

{

String[]item=ftpFileBox.SelectedItem.ToString().Split('');

stringtype=item[0];

if(type.Equals("<目录>"))

{

stringfile=item[1];

FileList+=(file+"/");//进入目录ftp:

//ServerIp/目录名/

ftpFileBox.Items.Clear();

connect();

}

else

{

if(ftpFileBox.SelectedItem.ToString()=="返回上级目录")

{

FileList="";

ftpFileBox.Items.Clear();

connect();

}

}

}

catch(Exceptionex)

{

MessageBox.Show(ex.Message);

}

}

4.3登录失败获得服务器的响应信息

privateFtpWebResponseGetFtpResponse(FtpWebRequestrequest)

{

FtpWebResponseresponse=null;

try

{

response=(FtpWebResponse)request.GetResponse();

returnresponse;

}

catch(WebExceptionerr)

{

listBoxInfo.Items.Add("出现异常,FTP返回状态:

"+err.Status.ToString());

FtpWebResponsee=(FtpWebResponse)err.Response;

listBoxInfo.Items.Add("StatusCode:

"+e.StatusCode);

listBoxInfo.Items.Add("StatusDescription:

"+e.StatusDescription);

returnnull;

}

catch(Exceptionerr)

{

listBoxInfo.Items.Add(err.Message);

returnnull;

}

}

4.4删除指定文件及文件夹

privatevoidbtnShanchu_Click(objectsender,EventArgse)

{

String[]item=ftpFileBox.SelectedItem.ToString().Split('');

stringtype=item[0];

stringfile=FileList+item[1];

if(ftpFileBox.SelectedIndex>-1)

{

try

{

if(type.Equals("<文件>"))

{

req=(FtpWebRequest)FtpWebRequest.Create(newUri("ftp:

//"+ftpServerIp+"/"+file));

req.Credentials=newNetworkCredential(ftpUserID,ftpPassword);

req.KeepAlive=false;

req.UseBinary=true;

req.Method=WebRequestMethods.Ftp.DeleteFile;

FtpWebResponseresponse=(FtpWebResponse)req.GetResponse();

MessageBox.Show("删除文件成功!

");

}

else

{

req=(FtpWebRequest)FtpWebRequest.Create(newUri("ftp:

//"+ftpServerIp+"/"+file));

req.Credentials=newNetworkCredential(ftpUserID,ftpPassword);

req.KeepAlive=false;

req.UseBinary=true;

req.Method=WebRequestMethods.Ftp.RemoveDirectory;

FtpWebResponseresponse=(FtpWebResponse)req.GetResponse();

MessageBox.Show("删除成功!

");

}

ftpFileBox.Items.Clear();

connect();

}

catch(Exceptionex)

{

MessageBox.Show(ex.Message);

}

}

}

4.5浏览上传文件

privatevoidbtnLiulan_Click(objectsender,EventArgse)

{

if(btnDenglu.Enabled==true)

MessageBox.Show("请?

登?

陆?

FTP服务?

器÷!

?

");

else

{

openFileDialog1.ShowDialog();

txtShangchuan.Text=openFileDialog1.FileName;//获取文件路径和文件名

}

}

4.6上传文件

privatevoidbtnShangchuan_Click(objectsender,EventArgse)

{

if(txtShangchuan.Text=="")

MessageBox.Show("没?

有瓺选?

择?

要癮上?

传?

的?

文?

件t!

?

");

else

{

stringFileSites=txtShangchuan.Text;

FileInfofileInf=newFileInfo(FileSites);

req=(FtpWebRequest)FtpWebRequest.Create(newUri("ftp:

//"+ftpServerIp+"/"+fileInf.Name));

req.Credentials=newNetworkCredential(ftpUserID,ftpPassword);

req.KeepAlive=false;

req.Method=WebRequestMethods.Ftp.UploadFile;

req.UseBinary=true;

byte[]buff=newbyte[1024];//1024为缓冲区大小

intContentLen;

//打开一个文件流上传文件

FileStreamfs=fileInf.OpenRead();

try

{

Streamstrm=req.GetRequestStream();

ContentLen=fs.Read(buff,0,1024);

//流内容没有结束

while(ContentLen!

=0)

{

//把内容从filestream写入uploadstream

strm.Write(buff,0,ContentLen);

ContentLen=fs.Read(buff,0,1024);

}

strm.Close();//关闭流

fs.Close();

txtShangchuan.Text="";

MessageBox.Show("上传成功!

");

ftpFileBox.Items.Clear();

connect();

}

catch(Exceptionex)

{

MessageBox.Show(ex.ToString());

}

}

}

4.7下载文件

privatevoidbtnXiazai_Click(objectsender,EventArgse)

{

if(ftpFileBox.SelectedIndex>-1)

{

String[]item=ftpFileBox.SelectedItem.ToString().Split('');

stringtype=item[0];

stringfile=FileList+item[1];

if(type.Equals("<文件>"))

{

try

{

req=(FtpWebRequest)FtpWebRequest.Create(newUri("ftp:

//"+ftpServerIp+"/"+file));

req.Credentials=newNetworkCredential(ftpUserID,ftpPassword);

req.Method=WebRequestMethods.Ftp.DownloadFile;

req.UseBinary=true;

SaveFileDialogsave=newSaveFileDialog();

save.FileName=file;

if(save.ShowDialog()==DialogResult.OK)

{

FileStreamoutputStream=newFileStream(save.FileName,FileMode.Create);

FtpWebResponseresponse=(FtpWebResponse)req.GetResponse();

StreamftpStream=response.GetResponseStream();

intreadCount;

byte[]buffer=newbyte[1024];

readCount=ftpStream.Read(buffer,0,1024);

while(readCount>0)

{

outputStream.Write(buffer,0,readCount);

readCount=ftpStream.Read(buffer,0,1024);

}

ftpStream.Close();

outputStream.Close();

response.Close();

MessageBox.Show("下载成功!

");

ftpFileBox.Items.Clear();

connect();

}

}

catch(Exceptionex)

{

MessageBox.Show(ex.ToString());

}

}

else

{

MessageBox.Show("不能下载目录!

");

}

}

else

{

MessageBox.Show("请选择文件进行下载!

");

}

}

4.8实现步骤

1.窗体UI布局设计。

2.FTP服务器的搭建。

3.连接FTP服务器,实现用户登录。

4.双击事件。

5.服务器响应。

6.上传文件。

7.下载文件。

8.删除文件及目录。

8.退出程序。

5实现功能及操作简介

5.1连接服务器

图5-1连接服务器

5.2服务器响应信息

图5-2服务器响应信息

5.3浏览

图5-3(a)浏览

图5-3(b)浏览

5.4上传

图5-4上传

5.5下载

图5-5下载

5.6删除

图5-6删除

5.7进入目录和返回上级目录

图5-7进入目录和返回上级目录

5.8退出

 

6实验结果及分析

6.1用户登录结果

分析:

通过连接FTP服务器,实现用户的登录

图6-1用户登录结果

6.2服务器响应信息结果

分析:

通过FtpWebResponse获得服务器的响应信息

图6-2(a)服务器响应信息结果

图6-2(b)服务器相应信息结果

6.3浏览结果

分析:

控件openFileDialog打开文件路径

图6-3浏览结果

6.4上传结果

分析:

通过文件路径找到文件信息,用fs.stream文件流实现上传文件

图6-4(a)上传结果

图6-4(b)上传结果

6.5下载结果

分析:

创建流outputStream输出文件

图6-5(a)下载结果

图6-5(b)下载结果

6.6删除结果

分析:

前缀type为”<文件>”时删除文件;前缀type为”<目录>”删除目录

图6-6(a)删除结果

图6-6(b)删除结果

图6-6(c)删除结果

图6-6(d)删除结果

6.7进入目录及返回上级目录结果

分析:

当前缀type为”<目录>”时进入列表,向ftpFileBox中添加项”返回上一层”,选中项为”返回上一层”时更新至根目录列表

图6-7(a)进入目录和返回上级目录结果

图6-7(b)进入目录和返回上级目录结果

6.8退出

7心得体会

此次我完成的课程设计题目是使用.NET技术编写FTP客户端。

虽然程序与心里预期的结果有些差距,但是整体的功能基本实现了。

虽然本学期主要学习的是C#网络编程,但是仍然感觉到很累,课程设计是一个综合知识运用的过程,没有前面汗水的积累,就没有现在代码的信手拈来,所以说我们要想巩固知识的最好办法就是经常运用它。

这次课程设计主要用的知识是FTP的相关知识。

FTP程序开发由于是新知识,所以应用起来还是有一些难度的。

首先要解决的就是数据传输的问题,在查阅相关资料后我知道了与FTP服务器进行数据传输的主要步骤包括:

1.根据Uri创建FtpWebRequest对象2.获取与FTP服务器通信的凭据3.设置KeepAlive的值为false,请求完成后关闭与服务器的控制连接4.设置发送到FTP服务器的命令5.用FtpWebRequest封装FTP服务器对请求的响应6.传输二进制流和文件流。

掌握了以上的步骤,这个程序实现起来就不难了。

这次课程设计让我巩固掌握了FTP网络程序开发的相关知识,,收获还是比较大的。

更让我懂得了代码只有自己敲出来,才是你自己的,没有数量的积累是不会有质的飞跃的道理。

今后我定会继续学习相关知识,写出更简便、好用的程序。

8参考文献

[1]何波、傅由甲.C#网络程序开发.2014年北京清华大学出版社

[2]明日科技.C#开发技术大全.2011年北京人民邮电出版社

[3]于国防、李剑.C#.NET网络程序设计实用教程.2013年北京清华大学出版社

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1