课程设计实现文件服务器报告,计算机网络课程设计简单FTP服务器实现

《计算机网络课程设计简单FTP服务器实现》由会员分享,可在线阅读,更多相关《计算机网络课程设计简单FTP服务器实现(10页珍藏版)》请在人人文库网上搜索。

1、计算机网络课程设计报告学 院:专 业:班 级:设计题目:简单FTP服务器实现 组 长:组 员指导教师:成 绩:时 间:2014至 2015学年度 第 1 学期9月25日至10月30日简单FTP服务器实现1 关键技术1.1 FTP协议FTP的目标是提高文件的共享性,提供非直接使用远程计算机,使存储介质对用户透明和可靠高效地传送数据。图1 FTP 服务示意图在开始阶段,标准FTP命令由用户PI产生并通过控制连接传送到服务器进程。服务器PI向用户PI返回标准应答。FTP命令指定数据连接参数和文件系统操作。用户DTP在特定数据端口侦听,服务器开始数据连接并以指定的参数开始数据传输。数据端口不必在开始F。

2、TP命令的机器上,但用户或用户FTP进程必须确定它在指定的数据端口上侦听。这个数据连接是全双工的。FTP协议中对应答码的意义有明确的规定,如下表所示: 表1 FTP协议应答码应答码意义应答码意义110重新启动标记应答。在这种情况下文本是确定的,它必须是:MARK yyyy=mmmm,其中yyyy是用户进程数据流标记,mmmm是服务器标记。120服务在nnn分钟内准备好125数据连接已打开,准备传送150文件状态良好,打开数据连接200命令成功202命令未实现211系统状态或系统帮助响应212目录状态213文件状态214帮助信息,信息仅对人类用户有用215名字系统类型220对新用户服务准备好22。

3、1服务关闭控制连接,可以退出登录225数据连接打开,无传输正在进行226关闭数据连接,请求的文件操作成功227进入被动模式230用户登录250请求的文件操作完成257创建PATHNAME331用户名正确,需要口令332登录时需要帐户信息350请求的文件操作需要进一步命令421不能提供服务,关闭控制连接425不能打开数据连接426关闭连接,中止传输450请求的文件操作未执行451中止请求的操作:有本地错误452未执行请求的操作:系统存储空间不足500格式错误,命令不可识别501参数语法错误502命令未实现503命令顺序错误504此参数下的命令功能未实现530未登录532存储文件需要帐户信息550。

4、未执行请求的操作551请求操作中止:页类型未知552请求的文件操作中止,存储分配溢出553未执行请求的操作:文件名不合法1.2 TCP协议的编程Socket(套接字)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。可以将Socket看作不同主机间的进程进行双向通信的端点,它构成了单个主机内及整个网络间的编程界面。Socket存在于通信域中,通信域是为了处理一般的线程通过Socket通信而引进的一种抽象概念。Socket通常和同一个域中的Socket交换数据(数据交换也可能穿越域的界限,但这时一定要执行某种解释程序)。各种进程使用这个相同的域互相之间用Internet协议簇来进行通。

5、信。2 功能设计2.1 功能示意图服务器端客户端验证登陆链接下载登陆上传下载删除主动被动图2 实现功能示意图以FTP的工作原理和权限归属为基础,用C#语言编写程序,用简单界面展示,用socket编程和二进制输入输出流来实现了FTP文件上传,下载,删除,读取文件列表这几项功能。采用端口为21和IP地址为127.0.0.1连接。3 代码实现3.1 启动服务器(服务器端)/ 启动服务器private void btnFtpServerStartStop_Click(object sender, EventArgs e)if (myTcpListener = null)listenThread = n。

6、ew Thread(ListenClientConnect);listenThread.IsBackground = true;listenThread.Start();lstboxStatus.Enabled = true;lstboxStatus.Items.Clear();lstboxStatus.Items.Add(已经启动Ftp服务.);btnFtpServerStartStop.Text = 停止;elsemyTcpListener.Stop();myTcpListener = null;listenThread.Abort();lstboxStatus.Items.Add(Ftp。

7、服务已停止!);lstboxStatus.TopIndex = lstboxStatus.Items.Count - 1;btnFtpServerStartStop.Text = 启动;/ 使用数据连接发送文件流(客户端发送下载文件命令)private void SendFileByUserSession(User user, FileStream fs)AddInfo(向用户发送(文件流):.);tryif (user.isBinary)byte bytes = new byte1024;BinaryReaderbinaryReader=new BinaryReader(fs);Intcou。

8、nt=binaryReader.Read(bytes,0, bytes.Length);while (count 0)user.dataSession.binaryWriter.Write(bytes, 0, count);user.dataSession.binaryWriter.Flush();count = binaryReader.Read(bytes, 0, bytes.Length);elseStreamReader streamReader = new StreamReader(fs);while (streamReader.Peek() -1)user.dataSession.。

9、streamWriter.WriteLine(streamReader.ReadLine();AddInfo(.发送完毕!);finallyuser.dataSession.Close();fs.Close();3.2 文件传输操作(客户端)由于代码过多且相似,以显示文件目录和上传文件为例。/ 处理并显示文件目录列表string ftpdir = s.Split(Environment.NewLine.ToCharArray(), StringSplitOptions.RemoveEmptyEntries);int length = 0;for (int i = 0; i )string na。

10、mefield = name.Split( );int namefieldlength = namefield.Length;string dirname; dirname = namefieldnamefieldlength - 1;/ 对齐dirname = dirname.PadRight(34, );name = dirname;/ 显示目录lstbxFtpResources.Items.Add(目录 + name);for (int i = 0; i )string namefield = name.Split( );int namefieldlength = namefield.L。

11、ength;string filenamefilename = namefieldnamefieldlength - 1;/ 上传文件到服务器事件private void btnUpload_Click(object sender, EventArgs e)/ 选择要上传的文件OpenFileDialog openFileDialog = new OpenFileDialog();openFileDialog.FileName = openFileDialog.FileNames.ToString();openFileDialog.Filter = 所有文件(*.*)|*.*;if (open。

12、FileDialog.ShowDialog() != DialogResult.OK)return;FileInfo fileinfo = new FileInfo(openFileDialog.FileName);trystring uri = GetUriString(fileinfo.Name);FtpWebRequest request = CreateFtpWebRequest(uri, WebRequestMethods.Ftp.UploadFile);request.ContentLength = fileinfo.Length;int buflength = 8196;byte。

13、 buffer = new bytebuflength;FileStream filestream = fileinfo.OpenRead();Stream responseStream = request.GetRequestStream();lstbxFtpState.Items.Add(打开上传流,文件上传中.);int contenlength = filestream.Read(buffer, 0, buflength);while (contenlength != 0)responseStream.Write(buffer, 0, contenlength);contenlengt。

14、h = filestream.Read(buffer, 0, buflength);responseStream.Close();filestream.Close();FtpWebResponse response = GetFtpResponse(request);if (response = null)lstbxFtpState.Items.Add(服务器未响应.);lstbxFtpState.TopIndex = lstbxFtpState.Items.Count - 1;return;lstbxFtpState.Items.Add(上传完毕,服务器返回: + response.Stat。

15、usCode + + response.StatusDescription);lstbxFtpState.TopIndex = lstbxFtpState.Items.Count - 1;MessageBox.Show(上传成功!);/ 上传成功后,立即刷新服务器目录列表ShowFtpFileAndDirectory();catch (WebException ex)lstbxFtpState.Items.Add(上传发生错误,返回信息为: + ex.Status);lstbxFtpState.TopIndex = lstbxFtpState.Items.Count - 1;MessageBo。

16、x.Show(ex.Message, 上传失败);4 实例演示首先在F:盘下新建文件夹计科112,在其中创建目录结构并放一些文件资源,例如图片,文档等。运行FTP服务器程序,然后点击“启动”按钮后就启动了FTP服务器,运行结果如下图所示。图3 ftp服务器启动FTP服务器程序中已经初始化用户名和密码,直接输入用户名和密码为19211203和19211205后点击“登录”按钮后就完成了用户验证的过程,并与FTP服务器建立了控制连接和数据连接。运行结果如下图:图4 登陆后ftp服务器图5 登陆后ftp客户端用户可以通过上传、“下载”和删除按钮来对FTP服务器上的文件进行操作。5 总结我们的系统还存在着很多不足,一方面因为时间原因因为选题阶段和构思阶段浪费了大量的时间,有很多可以实现的功能没有实现比如说客户端的注销功能。还有就是我们的系统不能经过多台电脑联网真实的模拟ftp服务器的功能,而只能在一台电脑上仿真模拟。这次课程设计感觉对我们的学习能力和全局考虑能力有很大的提高,总体来说我们发挥了我们全部的水平,不过也有一些缺陷,比如说我们一开始不是很懂选择方向出现了一些问题,这是我们没有沟通好的地方,如果还有机会一定改进这些问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值