网络协议的实现与应用实训报告.docx

上传人:b****6 文档编号:5279147 上传时间:2022-12-14 格式:DOCX 页数:41 大小:136.11KB
下载 相关 举报
网络协议的实现与应用实训报告.docx_第1页
第1页 / 共41页
网络协议的实现与应用实训报告.docx_第2页
第2页 / 共41页
网络协议的实现与应用实训报告.docx_第3页
第3页 / 共41页
网络协议的实现与应用实训报告.docx_第4页
第4页 / 共41页
网络协议的实现与应用实训报告.docx_第5页
第5页 / 共41页
点击查看更多>>
下载资源
资源描述

网络协议的实现与应用实训报告.docx

《网络协议的实现与应用实训报告.docx》由会员分享,可在线阅读,更多相关《网络协议的实现与应用实训报告.docx(41页珍藏版)》请在冰豆网上搜索。

网络协议的实现与应用实训报告.docx

网络协议的实现与应用实训报告

郑州轻工业学院本科

实验报告

网络协议的实现与应用实训

 

学院计算机与通信工程学院

专业年级网络运维

姓名王冲

学号541207110136

指导老师

 

一、实训目的

(1)理解FTP协议的工作原理,掌握FTP服务器的安装和配置方法。

(2)掌握FTP客户端的开发方法。

(3)掌握ICMP报文的格式和各字段含义,理解Ping程序的工作原理,掌

握ICMP协议在Ping命令中的应用。

二、实训任务

查阅相关资料,独立完成以下实训任务,并撰写实训报告。

1.FTP服务器的搭建(可在虚拟机上搭建)

使用Serv-U架设FTP服务器,设定多个FTP服务器,限定登录用户的权

限、登录目录及服务器空间大小。

2.FTP客户端的设计与实现

理解FTP工作原理,用自己熟悉的程序设计语言来实现FTP客户端。

FTP

客户端分为连接模块、文件管理模块、文件传输模块和辅助管理模块。

3.基于ICMP协议的应用的实现

设计并实现基于ICMP协议的网络命令PING程序

三、实训步骤

任务一、架设FTP服务器

对课题任务进行分析,按要求架设FTP服务器并对账户进行设置,限定登

录用户的权限、登录目录及服务器空间大小。

下载并运行Serv-U,出现“设置向导”窗口,然后按照这个向导的指引进

行配置。

具体步骤如下:

(1)设置Serv-U的IP地址与域名

单击“下一步”跳过系统提示信息,来到“您的IP地址”窗口,输入本机

的IP地址。

下一步,进行“域名”设定。

这个域名只是用来标识该FTP域,没

有特殊的含义,比如按照班级学号输入“”。

接下来的“系统

服务”选项必须选“是”,这样当用户的电脑一启动,服务器也会跟着开始运行。

(2)设置匿名登录

匿名访问就是允许用户以Anonymous为用户名,无需特定密码即可连接服

务器并拷贝文件。

如果用户不想让陌生人随意进入用户的FTP服务器,或想成

立VIP会员区,就应该在“匿名账号”窗口中选“否”,这样就只有经过用户

许可的账号才能登录该FTP。

鉴于匿名登录尚有一定的实用需求,可以选“是”。

之后就要为匿名账户指定FTP上传或下载的主目录,这是匿名用户登录到FTP

服务器后看到的目录。

设定后,向导还会继续询问用户是否将匿名用户锁定于此

目录中,从安全的角度考虑,建议选“是”。

这样匿名登录的用户将只能访问用

户指定的主目录及以下的各级子目录,而不能访问上级目录,便于保证硬盘上其

他文件的安全。

(3)创建新账户

除了匿名用户,用户一般还需要建立有密码的专用账号,也就是说可以让指

定用户以专门的账号和密码访问用户的服务器,这样做适用于实行会员制下载或

只让好友访问。

在“命名的账号”窗口中将“创建命名的账号吗?

”选为“是”,

进入“账号名称”设置,填入用户制定的账号名称,而后在“账号密码”窗口输

入该账号的密码。

单击“下一步”,会要求用户指定FTP主目录,并询问是否

将用户锁定于主目录中,选“是”,作用与匿名账户设定基本相同,不再赘述。

紧接着要设置该账户的远程管理员权限,分为“无权限”、“组管理员”、“域

管理员”、“只读管理员”和“系统管理员”五种选项,每项的权限各不相同,

可根据具体情况进行选择。

至此,用户已拥有了一个域——及

两个账号——Anonymous和xxqn0901。

点击“完成”退出向导,稍等片刻Serv-U

软件主界面将自动弹出,用户还要在此进行一些管理员设置。

(4)管理员设置

在Serv-U管理员界面,每个Serv-U引擎都能用来运行多个虚拟的FTP服

务器,而虚拟的FTP服务器就称为“域”。

对FTP服务器来说,建立多个域是

非常有用的,每个域都有各自的用户、组和相关的设置。

下面简要介绍管理器界

面上必要的各项设置。

首先点击窗体左方的“本地服务器”,选择右边的“自动

开始(系统服务)”。

选择左方的“域→活动”,这里记载了该域下所有用户的

活动情况,是非常重要的监控数据。

“域→组”:

在此可自建一些用户组,把各

类用户归到相应的组中,便于管理。

“域→用户”:

这里有用户刚建立的两个账

号,其中的细节设置十分重要,具体如下。

a)账号:

如果有用户违反FTP的规定,用户可以点击此处的“禁用账号”,

让该用户在一段时间内被禁止登录。

另外此处的“锁定用户于主目录”

一定要勾选,否则用户硬盘的绝对地址将暴露。

b)常规:

根据自身的实际需要,在此设置最大的下载和上传速度、登录到

本服务器的最大用户数、同一IP地址的登录线程数等。

c)IP访问:

用户可以在此拒绝某个讨厌的IP地址访问用户的FTP服务器,

只要在“编辑规则”处填上某个IP地址,以后该IP的访问将会全部被拦下。

d)配额:

选择“启用磁盘配额”,在此为每位FTP用户设置硬盘空间。

击“计算当前”,可知当前的所有已用空间大小,在“最大”一栏中设定最大的

空间值。

最后,请在有改动内容的标签卡上点击右键,选择“应用”,如此才能

使简单的个人FTP服务器设置生效。

任务二、利用C#/C++实现FTP客户端

在理解了FTP工作原理后,利用C#/C++语言来设计和开发FTP客户端。

FTP客户端分为连接模块、文件管理模块、文件传输模块和辅助管理模块。

连接

模块实现主机与服务器的连接的功能;文件管理模块实现新建文件、删除文件等

功能;文件传输模块实现主机与服务器连接成功后上传和下载文件功能。

辅助管

理模块实现一些相关功能,如读写配置INI文件。

 

1.系统界面设计

为了使用户能够方便的使用FTP客户端,本系统实现过程中将用户登录和信息显示整合在一个窗体中。

FTP客户端仅设置一个主窗体,主窗体中显示以下信息。

用户登录:

用来让用户输入服务器IP,用户名,密码。

本系统为简单起见,此处将服务器配置在本机,并设定了有效用户名和密码。

上下载队列显示:

显示正在上传或者下载的文件。

当用户上传、下载文件时,

对应的FTP服务器会根据FTP相关命令和响应码显示上传、下载文件的相关信

息。

按钮操作:

用户可以通过点击登录、上传、下载按钮来实现客户端的具体操作。

信息显示:

显示服务器目录和文件列表,当对文件进行相关操作时,会显示

服务器的返回信息。

FTP客户端主界面图示:

2.连接模块

系统的连接模块主要是给用户提供一个连接FTP服务器(使用serv-u软件

实现)的平台,只有成功连接到FTP服务器,FTP客户端才可以登录到FTP服务

器进行相关的操作。

系统连接模块图如图所示:

连接模块功能图

3.用户登录

该简单FTP客户端系统是为了方便用户实现资源共享而设计的软件,用户通

过登录到服务器端,进行文件的上传或者下载来完成资源的共享。

本系统设置的

登录界面和主界面在一起,当运行程序时,系统会默认的显示出服务器的IP地

址,用户名以及密码,用户无需再手动输入相关信息,点击“登录”按钮后向

FTP服务器发送信息,然后FTP客户端显示服务器目录和文件列表,并且还显示

服务器返回的信息。

4.登录属性设置

为使客户端能登录服务器,须设置以下属性:

(1)FTP服务器IP:

tbxServerIp(为简单起见,置为127.0.0.1)

(2)用户名:

tbxUsername

(3)密码:

tbxPassword

(4)说明:

txtport(一般为21,这里我们为简单起见将端口号设为21)

tbxUsername及tbxPassword代表登录此FTP服务器所需要的用户名及密码,若

点击匿名,则代表是以anonymous(匿名)身份登入;若输入用户名与密

码,Connect会以此做为其用户名及密码与FTP服务器建立连接;随后是对“登

录”按钮的设置,实现与服务器端的连接。

5.登录模块代码

///

登录

privatevoidbtnlogin_Click(objectsender,EventArgse)

{

if(tbxServerIp.Text==string.Empty)

{

MessageBox.Show("请先填写服务器IP地址","提示");

return;

}

ftpUristring="ftp:

//"+tbxServerIp.Text;

networkCredential=newNetworkCredential(tbxUsername.Text,tbxPassword.Text);

if(ShowFtpFileAndDirectory()==true)

{

btnlogin.Enabled=false;

btnlogout.Enabled=true;

lstbxFtpResources.Enabled=true;

lstbxFtpState.Enabled=true;

tbxServerIp.Enabled=false;

if(chkbxAnonymous.Checked==false)

{

tbxUsername.Enabled=false;

tbxPassword.Enabled=false;

chkbxAnonymous.Enabled=false;

}

else

{

chkbxAnonymous.Enabled=false;

}

tbxloginmessage.Text="登录成功";

btnUpload.Enabled=true;

btndownload.Enabled=true;

btnDelete.Enabled=true;

}

else

{

lstbxFtpState.Enabled=true;

tbxloginmessage.Text="登录失败";

}

}

6.上传模块代码

///

///上传文件

///

privatevoidbtnUpload_Click(objectsender,EventArgse)

{

//选择要上传的文件

OpenFileDialogopenFileDialog=newOpenFileDialog();

openFileDialog.FileName=openFileDialog.FileNames.ToString();

openFileDialog.Filter="所有文件(*.*)|*.*";

if(openFileDialog.ShowDialog()!

=DialogResult.OK)

{

return;

}

FileInfofileinfo=newFileInfo(openFileDialog.FileName);

try

{

stringuri=GetUriString(fileinfo.Name);

FtpWebRequestrequest=CreateFtpWebRequest(uri,WebRequestMethods.Ftp.UploadFile);

request.ContentLength=fileinfo.Length;

intbuflength=8196;

byte[]buffer=newbyte[buflength];

FileStreamfilestream=fileinfo.OpenRead();

StreamresponseStream=request.GetRequestStream();

lstbxFtpState.Items.Add("打开上传流,文件上传中...");

intcontenlength=filestream.Read(buffer,0,buflength);

while(contenlength!

=0)

{

responseStream.Write(buffer,0,contenlength);

contenlength=filestream.Read(buffer,0,buflength);

}

responseStream.Close();

filestream.Close();

FtpWebResponseresponse=GetFtpResponse(request);

if(response==null)

{

lstbxFtpState.Items.Add("服务器未响应...");

lstbxFtpState.TopIndex=lstbxFtpState.Items.Count-1;

return;

}

lstbxFtpState.Items.Add("上传完毕,服务器返回:

"+response.StatusCode+""+response.StatusDescription);

lstbxFtpState.TopIndex=lstbxFtpState.Items.Count-1;

MessageBox.Show("上传成功!

");

//上传成功后,立即刷新服务器目录列表

ShowFtpFileAndDirectory();

}

catch(WebExceptionex)

{

lstbxFtpState.Items.Add("上传发生错误,返回信息为:

"+ex.Status);

lstbxFtpState.TopIndex=lstbxFtpState.Items.Count-1;

MessageBox.Show(ex.Message,"上传失败");

}

}

7.下载功能分析

文件下载是通过点击“下载”按钮来完成对选定的远程目录下文件的下载。

此功能实现主要是通过程序获取本地和远程的当前路径,区分被选中的内容类型

为文件还是目录,若为文件时执行下载过程,否则退出。

7.1下载模块代码

///

///下载文件

///

privatevoidbuttonDownload_Click(objectsender,EventArgse)

{

stringfileName=GetSelectedFile();

if(fileName.Length==0)

{

MessageBox.Show("请先选择要下载的文件");

return;

}

stringfilePath="D:

\\ftpdownload\\DownLoad";

//stringfilePath=Application.StartupPath

if(Directory.Exists(filePath)==false)

{

Directory.CreateDirectory(filePath);

}

StreamresponseStream=null;

FileStreamfileStream=null;

StreamReaderreader=null;

try

{

stringuri=GetUriString(fileName);

MessageBox.Show(uri);

FtpWebRequestrequest=CreateFtpWebRequest(uri,WebRequestMethods.Ftp.DownloadFile);

FtpWebResponseresponse=GetFtpResponse(request);

if(response==null)

{

return;

}

responseStream=response.GetResponseStream();

stringpath=filePath+"\\"+fileName;

MessageBox.Show(path);

fileStream=File.Create(path);

byte[]buffer=newbyte[8196];

intbytesRead;

while(true)

{

bytesRead=responseStream.Read(buffer,0,buffer.Length);

if(bytesRead==0)

{

break;

}

fileStream.Write(buffer,0,bytesRead);

}

MessageBox.Show("下载完毕");

}

catch(UriFormatExceptionerr)

{

MessageBox.Show(err.Message);

}

catch(WebExceptionerr)

{

MessageBox.Show(err.Message);

}

catch(IOExceptionerr)

{

MessageBox.Show(err.Message);

}

finally

{

if(reader!

=null)

{

reader.Close();

}

elseif(responseStream!

=null)

{

responseStream.Close();

}

if(fileStream!

=null)

{

fileStream.Close();

}

}

}

8.运行结果

登陆演示:

上传演示:

下载演示:

删除演示:

源程序

usingSystem;

usingSystem.Collections.Generic;

usingSystem.ComponentModel;

usingSystem.Data;

usingSystem.Drawing;

usingSystem.Linq;

usingSystem.Text;

usingSystem.Threading.Tasks;

usingSystem.IO;

usingSystem.Net;

usingSystem.Windows.Forms;

namespaceFTP_Client

{

publicpartialclassForm1:

Form

{

privateconstintftpport=21;

privatestringftpUristring=null;

privateNetworkCredentialnetworkCredential;

privatestringcurrentDir="/";

publicForm1()

{

InitializeComponent();

IPAddress[]ips=Dns.GetHostAddresses("");

tbxServerIp.Text=ips[0].ToString();

tbxServerIp.SelectAll();

btnlogout.Enabled=false;

lstbxFtpResources.Enabled=false;

lstbxFtpState.Enabled=false;

btnUpload.Enabled=false;

btndownload.Enabled=false;

btnDelete.Enabled=false;

}

#region键盘按下事件

privatevoidtbxServerIp_KeyPress(objectsender,KeyPressEventArgse)

{

//输入用户名回车后,焦点直接转到密码文本框

if(e.KeyChar==(char)13)

{

tbxUsername.Focus();

}

}

privatevoidtbxUsername_KeyPress(objectsender,KeyPressEventArgse)

{

//输入用户名回车后,焦点直接转到密码文本框

if(e.KeyChar==(char)13)

{

tbxPassword.Focus();

}

}

privatevoidtbxPassword_KeyPress(objectsender,KeyPressEventArgse)

{

//输入密码回车后直接可以登录

if(e.KeyChar==(char)13)

{

btnlogin.Focus();

}

}

#endregion

privatevoidchkbxAnonymous_Click(objectsender,EventArgse)

{

//实名方式登录

//此时需要输入用户名和密码

if(chkbxAnonymous.Checked==false)

{

tbxUsername.Enabled=true;

tbxUsername.Text="user1";

tbxPassword.Enabled=true;

tbxPassword.Text="";

tbxUsername.Focus();

}

//匿名方式

else

{

tbxUsername.Text="anonymous";

tbxUsername.Enabled=false;

tbxPassword.Text="";

tbxPassword.Enabled=false;

}

}

#region与服务器的交互

//创建FTP连接

privateFtpWebRequestCreateFtpWebRequest(stringuri,stringrequestMethod)

{

FtpWebRequestrequest=(FtpWebRequest)FtpWebRequest.Create(uri);

request.Credentials=networkCredential;

request.KeepAlive=true;

request.UseBinary=true;

request.Method=requestMethod;

returnrequest;

}

//获取服务器返回的响应体

privateFtpWebResponseGetFtpResponse(FtpWebRequest

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

当前位置:首页 > 表格模板 > 书信模板

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

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