网络程序课程设计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
因篇幅问题不能全部显示,请点此查看更多更全内容