您的当前位置:首页正文

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

来源:化拓教育网


网络程序开发课程设计报告

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

学 院(系):计算机科学与工程学院 专 业 : 网络工程 指导老师: 傅由甲 学生姓名: 刘凡 学号:11303090122

时间:从2016年1月11日到2016年1月15日

网络程序开发课程设计 使用.NET技术编写FTP客户端

目 录

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

网络程序开发课程设计 使用.NET技术编写FTP客户端

1 课题任务及要求

1.1 课题任务及要求

课题:使用.NET技术编写FTP客户端 设计要求: FTP客户端:

(1)根据服务器的IP地址,用户名,密码登陆FTP服务器。 (2)客户端上显示服务器响应信息。

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

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

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

(6)实现删除服务器上指定的文件和文件夹。 课题组人数:限1人。

1

网络程序开发课程设计 使用.NET技术编写FTP客户端

2 组员任务分工

2.1 组员任务及分工

刘凡 11303090122 任务分工:完成程序源码,编写实验文档和PPT

2

网络程序开发课程设计 使用.NET技术编写FTP客户端

3 相关知识简介

3.1 FTP

FTP是File Transfer Protocol(文件传输协议)的英文简称,而中文简称为“文传协议”。用于Internet上的控制文件的双向传输。同时,它也是一个应用程序(Application)。基于不同的操作系统有不同的FTP应用程序,而所有这些应用程序都遵守同一种协议以传输文件。在FTP的使用当中,用户经常遇到两个概念:\"下载\"(Download)和\"上传\"(Upload)。\"下载\"文件就是从远程主机拷贝文件至自己的计算机上;\"上传\"文件就是将文件从自己的计算机中拷贝至远程主机上。用Internet语言来说,用户可通过客户机程序向(从)远程主机上传(下载)文件。 3.2 Serv-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上传文件等。

3

网络程序开发课程设计 使用.NET技术编写FTP客户端

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

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

private void btnDenglu_Click(object sender, EventArgs e) {

FileList = \" \"; connect(); }

public void connect() {

listBoxInfo.Items.Clear(); try {

ftpServerIp = txtIp.Text; ftpUserID = txtUsername.Text; ftpPassword = txtPwd.Text;

req = (FtpWebRequest)FtpWebRequest.Create(new Uri(\"ftp://\" + ftpServerIp + \"/\" +FileList));

req.Credentials = new NetworkCredential(ftpUserID, ftpPassword); req.KeepAlive = false;

req.Method = WebRequestMethods.Ftp.ListDirectoryDetails; req.UseBinary = true;

FtpWebResponse response = GetFtpResponse(req);

listBoxInfo.Items.Add(\"服务器返回:\" + response.StatusDescription); StreamReader reader = new StreamReader(response.GetResponseStream());//

string s = reader.ReadToEnd();

4

网络程序开发课程设计 使用.NET技术编写FTP客户端

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

listBoxInfo.Items.AddRange(ftpDir);

listBoxInfo.Items.Add(\"服务器返回:\" + response.StatusDescription);

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

for (int i = 0; i < ftpDir.Length; i++) {

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

string filename = 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;

5

网络程序开发课程设计 使用.NET技术编写FTP客户端

}

catch (Exception ex) {

MessageBox.Show(\"登陆失败!\"); MessageBox.Show(ex.ToString()); } }

4.2双击事件功能的实现

private void ftpFileBox_MouseDoubleClick(object sender, MouseEventArgs e) { try {

String[] item = ftpFileBox.SelectedItem.ToString().Split(' '); string type = item[0]; if (type.Equals(\"<目录>\")) {

string file = item[1];

FileList += (file + \"/\");//进入目录 ftp:// ServerIp/ 目录名/ ftpFileBox.Items.Clear(); connect(); } else {

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

FileList = \" \";

ftpFileBox.Items.Clear(); connect(); }

6

网络程序开发课程设计 使用.NET技术编写FTP客户端

} }

catch (Exception ex) {

MessageBox.Show(ex.Message); } }

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

private FtpWebResponse GetFtpResponse(FtpWebRequest request) {

FtpWebResponse response = null; try {

response = (FtpWebResponse)request.GetResponse(); return response; }

catch (WebException err) {

listBoxInfo.Items.Add(\"出现异常,FTP返回状态:\" + err.Status.ToString()); FtpWebResponse e = (FtpWebResponse)err.Response; listBoxInfo.Items.Add(\"Status Code :\" + e.StatusCode);

listBoxInfo.Items.Add(\"Status Description :\" + e.StatusDescription); return null; }

catch (Exception err) {

listBoxInfo.Items.Add(err.Message); return null; } }

7

网络程序开发课程设计 使用.NET技术编写FTP客户端

4.4删除指定文件及文件夹

private void btnShanchu_Click(object sender, EventArgs e) {

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

string file = FileList + item[1]; if (ftpFileBox.SelectedIndex > -1) { try {

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

req = (FtpWebRequest)FtpWebRequest.Create(new Uri(\"ftp://\" + ftpServerIp + \"/\" + file));

req.Credentials = new NetworkCredential(ftpUserID, ftpPassword); req.KeepAlive = false;

req.UseBinary = true;

req.Method = WebRequestMethods.Ftp.DeleteFile;

FtpWebResponse response = (FtpWebResponse)req.GetResponse(); MessageBox.Show(\"删除文件成功!\"); } else {

req = (FtpWebRequest)FtpWebRequest.Create(new Uri(\"ftp://\" + ftpServerIp + \"/\" + file));

req.Credentials = new NetworkCredential(ftpUserID, ftpPassword); req.KeepAlive = false;

8

网络程序开发课程设计 使用.NET技术编写FTP客户端

req.UseBinary = true;

req.Method = WebRequestMethods.Ftp.RemoveDirectory;

FtpWebResponse response = (FtpWebResponse)req.GetResponse(); MessageBox.Show(\"删除成功!\"); }

ftpFileBox.Items.Clear(); connect(); }

catch (Exception ex) {

MessageBox.Show(ex.Message); } } }

4.5浏览上传文件

private void btnLiulan_Click(object sender, EventArgs e) {

if (btnDenglu.Enabled == true)

MessageBox.Show(\"请?登?陆?FTP服务?器÷!?\"); else {

openFileDialog1.ShowDialog();

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

4.6上传文件

private void btnShangchuan_Click(object sender, EventArgs e) {

if (txtShangchuan.Text == \"\")

MessageBox.Show(\"没?有瓺选?择?要癮上?传?的?文?件t!?\");

9

网络程序开发课程设计 使用.NET技术编写FTP客户端

else {

string FileSites = txtShangchuan.Text; FileInfo fileInf = new FileInfo(FileSites);

req = (FtpWebRequest)FtpWebRequest.Create(new Uri(\"ftp://\" + ftpServerIp + \"/\" + fileInf.Name));

req.Credentials = new NetworkCredential(ftpUserID, ftpPassword); req.KeepAlive = false;

req.Method = WebRequestMethods.Ftp.UploadFile; req.UseBinary = true;

byte[] buff = new byte[1024];//1024为缓冲区大小 int ContentLen;

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

FileStream fs = fileInf.OpenRead(); try {

Stream strm = req.GetRequestStream(); ContentLen = fs.Read(buff, 0, 1024);

//流内容没有结束 while (ContentLen != 0) {

//把内容从file stream写入upload stream strm.Write(buff, 0, ContentLen); ContentLen = fs.Read(buff, 0, 1024); }

strm.Close();//关闭流 fs.Close();

10

网络程序开发课程设计 使用.NET技术编写FTP客户端

txtShangchuan.Text = \"\"; MessageBox.Show(\"上传成功!\"); ftpFileBox.Items.Clear(); connect(); }

catch (Exception ex) {

MessageBox.Show(ex.ToString()); } } }

4.7下载文件

private void btnXiazai_Click(object sender, EventArgs e) {

if (ftpFileBox.SelectedIndex > -1) {

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

string file = FileList + item[1]; if (type.Equals(\"<文件>\")) { try {

req = (FtpWebRequest)FtpWebRequest.Create(new Uri(\"ftp://\" + ftpServerIp + \"/\" + file));

req.Credentials = new NetworkCredential(ftpUserID, ftpPassword); req.Method = WebRequestMethods.Ftp.DownloadFile; req.UseBinary = true;

11

网络程序开发课程设计 使用.NET技术编写FTP客户端

SaveFileDialog save = new SaveFileDialog(); save.FileName = file;

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

FileStream outputStream = new FileStream(save.FileName, FileMode.Create);

FtpWebResponse response = (FtpWebResponse)req.GetResponse(); Stream ftpStream = response.GetResponseStream();

int readCount;

byte[] buffer = new byte[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 (Exception ex) {

MessageBox.Show(ex.ToString());

12

网络程序开发课程设计 使用.NET技术编写FTP客户端

} } else {

MessageBox.Show(\"不能下载目录!\"); } } else {

MessageBox.Show(\"请选择文件进行下载!\"); } }

4.8实现步骤

1.窗体UI布局设计。2.FTP服务器的搭建。3.连接FTP服务器,实现用户登录。4.双击事件。5.服务器响应。6.上传文件。7.下载文件。8.删除文件及目录。8.退出程序。

13

网络程序开发课程设计 使用.NET技术编写FTP客户端

5 实现功能及操作简介

5.1连接服务器

图5-1 连接服务器

5.2服务器响应信息

图5-2 服务器响应信息

5.3浏览

14

网络程序开发课程设计 使用.NET技术编写FTP客户端

图5-3(a) 浏览

图5-3(b) 浏览

5.4上传

图5-4 上传

5.5下载

15

网络程序开发课程设计 使用.NET技术编写FTP客户端

图5-5 下载

5.6删除

图5-6 删除

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

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

5.8退出

16

网络程序开发课程设计 使用.NET技术编写FTP客户端

6 实验结果及分析

6.1用户登录结果

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

图6-1 用户登录结果

6.2服务器响应信息结果

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

17

网络程序开发课程设计 使用.NET技术编写FTP客户端

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

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

6.3浏览结果

分析:控件openFileDialog打开文件路径

图6-3 浏览结果

6.4上传结果

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

18

网络程序开发课程设计 使用.NET技术编写FTP客户端

图6-4(a) 上传结果

图6-4(b) 上传结果

6.5下载结果

分析:创建流outputStream输出文件

图6-5(a) 下载结果

19

网络程序开发课程设计 使用.NET技术编写FTP客户端

图6-5(b) 下载结果

6.6删除结果

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

图6-6(a) 删除结果

图6-6(b) 删除结果

20

网络程序开发课程设计 使用.NET技术编写FTP客户端

图6-6(c) 删除结果

图6-6(d) 删除结果

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

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

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

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

6.8退出

21

网络程序开发课程设计 使用.NET技术编写FTP客户端

7 心得体会

此次我完成的课程设计题目是使用.NET技术编写FTP客户端。虽然程序与心里预期的结果有些差距,但是整体的功能基本实现了。虽然本学期主要学习的是C#网络编程,但是仍然感觉到很累,课程设计是一个综合知识运用的过程,没有前面汗水的积累,就没有现在代码的信手拈来,所以说我们要想巩固知识的最好办法就是经常运用它。

这次课程设计主要用的知识是FTP的相关知识。FTP程序开发由于是新知识,所以应用起来还是有一些难度的。首先要解决的就是数据传输的问题,在查阅相关资料后我知道了与FTP服务器进行数据传输的主要步骤包括:1.根据Uri创建FtpWebRequest对象2.获取与FTP服务器通信的凭据3.设置KeepAlive的值为false,请求完成后关闭与服务器的控制连接4.设置发送到FTP服务器的命令5.用FtpWebRequest封装FTP服务器对请求的响应6.传输二进制流和文件流。掌握了以上的步骤,这个程序实现起来就不难了。

这次课程设计让我巩固掌握了FTP网络程序开发的相关知识,,收获还是比较大的。更让我懂得了代码只有自己敲出来,才是你自己的,没有数量的积累是不会有质的飞跃的道理。今后我定会继续学习相关知识,写出更简便、好用的程序。

22

网络程序开发课程设计 使用.NET技术编写FTP客户端

8 参考文献

[1] 何波、傅由甲.C#网络程序开发.2014年 北京 清华大学出版社 [2] 明日科技.C#开发技术大全.2011年 北京 人民邮电出版社

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

23

因篇幅问题不能全部显示,请点此查看更多更全内容