当前位置:文档之家› 网络程序课程设计报告模版

网络程序课程设计报告模版

《高级网络程序设计》课程设计报告题目FTP文件传输协议学号11102410姓名倪福柱计算机网络工程教研室2015年01月12 日目录一、实验目的………………………………………………………二、实验内容和要求………………………………………………..1、实验内容……………………………………………………..2、具体要求……………………………………………………..三、需要完成的的内容…………………………………………………………1.FTP系统模型…………………………………………………………….2. 系统功能设计……………………………………………………………2.1总体设计…………………………………………………………...2.2系统实现……………………………………………………………四、具体实现步骤………………………………………………………………..1. FTPClient用户界面的实现……………………………………………….2. FTPClient控制连接的实现……………………………………………….3. FTPClient数据传输连接的实现………………………………………….3.1下载文件操作………………………………………………………..3.1下载文件操作………………………………………………………..3.3显示服务器的路径…………………………………………………..3.4进入服务器更改路径………………………………………………..4. FTPServer控制连接的实现………………………………………………5. FTPServer数据传输线程的实现…………………………………………5.1读取本地文件下载给客户端…………………………………………5.2接收客户端的上传的文件……………………………………………5.3获取服务器本地系统路径……………………………………………五、实验结果…………………………………………………………………….六、实验心得…………………………………………………………………….天津科技大学计算机学院《高级网络程序设计》课程设计一、课程设计内容1、实验内容我们的计算机网络实验环境建立在TCP/IP 网络体系结构之上。

各计算机除了安装TCP/IP 软件外,还安装了TCP/IP 开发系统。

实验室各计算机具备Windows环境中套接字socket 的编程接口功能,可为用户提供全网范围的进程通信功能。

本实验要求学生利用这些功能,设计和实现一个简单的文件传送协议。

二、设计目的文件传送是各种计算机网络都实现的基本功能,文件传送协议是一种最基本的应用层协议按照客户/服务器的模式进行工作,提供交互式的访问,是INTERNET使用最广泛的协议之一。

本实验的目的是,学会利用已有网络环境设计并实现简单应用层协议,掌握TCP/IP 网络应用程序基本的设计方法和实现技巧。

三、具体要求用socket 编程接口编写两个程序,分别为客户程序(client.c)和服务器程序(server.c),该程序应能实现下述命令功能:get:取远方的一个文件put:传给远方一个文件pwd:显示远主当前目录pwd:显示远主当前目录cd :改变远方当前目录?:显示你提供的命令quit :退出返回这此命令的具体工作方式(指给出结果的形式)可以参照FTP 的相应命令,有余力的同学可以多实现几个命令。

最后,写出实验报告。

1.FTPSERVER服务器界面的实现自动获取服务器代码:{TcpListener myTcpListener = null;private Thread listenThread;// 保存用户名和密码Dictionary<string, string> users;public FtpServerForm(){InitializeComponent();// 初始化用户名和密码 users = new Dictionary<string, string>(); users.Add("admin", "admin");// 设置默认的主目录tbxFtpRoot.Text = "D:/MyFtpServerRoot/";IPAddress[] ips = Dns.GetHostAddresses("");tbxFtpServerIp.Text = ips[1].ToString();tbxFtpServerPort.Text = "21";lstboxStatus.Enabled = false;}服务器启动代码:// 启动服务器private void btnFtpServerStartStop_Click(object sender, EventArgs e){if (myTcpListener == null){listenThread = new Thread(ListenClientConnect);listenThread.IsBackground = true;listenThread.Start();lstboxStatus.Enabled = true;lstboxStatus.Items.Clear();lstboxStatus.Items.Add("已经启动Ftp服务...");btnFtpServerStartStop.Text = "停止";}else{myTcpListener.Stop();myTcpListener = null;listenThread.Abort();lstboxStatus.Items.Add("Ftp服务已停止!");lstboxStatus.TopIndex = lstboxStatus.Items.Count - 1;btnFtpServerStartStop.Text = "启动";}}监听客户端代码:private void ListenClientConnect(){myTcpListener = new TcpListener(IPAddress.Parse(tbxFtpServerIp.Text), int.Parse(tbxFtpServerPort.Text));// 监听端口,处理客户端连接myTcpListener.Start();AddInfo("启动FTP服务成功!");AddInfo("Ftp服务器运行中...[点击”停止“按钮停止FTP服务]");while (true){try{// 接收连接请求TcpClient tcpClient = myTcpListener.AcceptTcpClient();AddInfo(string.Format("客户端({0})与本机({1})建立Ftp连接"", tcpClient.Client.RemoteEndPoint, myTcpListener.LocalEndpoint));User user = new User();mandSession = new UserSeesion(tcpClient);user.workDir = tbxFtpRoot.Text;Thread t = new Thread(UserProcessing);t.IsBackground = true;t.Start(user);}catch{break;}}}处理客户端请求:private void UserProcessing(object obj){User user = (User)obj;string sendString = "220 FTP Server v1.0";RepleyCommandToUser(user, sendString);while (true){string receiveString = null;try{// 读取客户端发来的请求信息receiveString = mandSession.streamReader.ReadLine(); }catch(Exception ex){if (mandSession.tcpClient.Connected == false){AddInfo(string.Format("客户端({0}断开连接!)"mandSession.tcpClient.Client.RemoteEndPoint));}else{AddInfo("接收命令失败!" + ex.Message);}break;}if (receiveString == null){AddInfo("接收字符串为null,结束线程!");break;}AddInfo(string.Format("来自{0}:[{1}]",mandSession.tcpClient.Client.RemoteEndPoint, receiveString));// 分解客户端发来的控制信息中的命令和参数string command = receiveString;string param = string.Empty;int index = receiveString.IndexOf(' ');if (index != -1){command = receiveString.Substring(0, index).ToUpper();param = receiveString.Substring(command.Length).Trim();}// 处理不需登录即可响应的命令(这里只处理QUIT)if(command == "QUIT"){// 关闭TCP连接并释放与其关联的所有资源mandSession.Close();return;}else{switch (user.loginOK){// 等待用户输入用户名case 0:CommandUser(user, command, param);break;// 等待用户输入密码case 1:CommandPassword(user, command, param);break;// 用户名和密码验证正确后登陆case 2:switch (command){case"CWD":CommandCWD(user, param);break;case"PWD":CommandPWD(user);break;case"PASV":CommandPASV(user);break;case"PORT":CommandPORT(user, param);break;case"LIST":CommandLIST(user, param);break;case"NLIST":CommandLIST(user, param);break;// 处理下载文件命令case"RETR":CommandRETR(user, param);break;// 处理上传文件命令case"STOR":CommandSTOR(user, param);break;// 处理删除命令case"DELE":CommandDELE(user, param);break;// 使用Type命令在ASCII和二进制模式进行变换case"TYPE":CommandTYPE(user, param);break;default:sendString = "502 command is not implemented."; RepleyCommandToUser(user, sendString);break;}break;}}}}2.FTPClient客户端界面的实现登陆功能实现代码:private void btnlogin_Click(object sender, EventArgs e){if (tbxServerIp.Text == string.Empty){MessageBox.Show("请先填写服务器IP地址", "提示");return;}ftpUristring = "ftp://" + tbxServerIp.Text;networkCredential = new NetworkCredential(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 = "登录失败";}}注销:private void btnlogout_Click(object sender, EventArgs e){btnlogin.Enabled = true;btnlogout.Enabled = false;tbxServerIp.Enabled = true;tbxServerIp.SelectAll();tbxServerIp.Focus();chkbxAnonymous.Enabled = true;if (chkbxAnonymous.Checked == false){tbxUsername.Enabled = true;tbxPassword.Enabled = true;}tbxloginmessage.Text = "你已经退出了。

相关主题