计算机网络课程设计报告Word下载.docx
《计算机网络课程设计报告Word下载.docx》由会员分享,可在线阅读,更多相关《计算机网络课程设计报告Word下载.docx(31页珍藏版)》请在冰豆网上搜索。
![计算机网络课程设计报告Word下载.docx](https://file1.bdocx.com/fileroot1/2023-1/8/eecebbd4-27c9-47d2-b25a-83d6a00e2821/eecebbd4-27c9-47d2-b25a-83d6a00e28211.gif)
FTP协议在TCP/IP协议栈中的位置如表1:
表1TCP/IP协议栈中关于FTP的模块
HTTPFTPTELNSMTPDNSTFTPNMP
应用层
TCPUDP
传输层
IP
互联网络层
X25ISDNLANWLANFDDIATM
网络接口层
当启动FTP从远程计算机拷贝文件时,事实上启动了两个程序:
一个本地机器上的FTP客户端程序,它向FTP服务器提出拷贝文件的请求。
另一个是启动在远程计算机的上的FTP服务器程序,它响应请求把你指定的文件传送到你的计算机中。
FTP采用“客户端/服务器”方式,用户要在自己的本地计算机上安装FTP客户端程序。
从根本上说,FTP协议就是在网络中各种不同的计算机之间按照TCP/IP协议来传输文件。
FTP协议采用客户端/服务器(Client/Sever)模式,由FTP客户端程序和FTP服务器端程序组成。
使用时,先启动FTP客户端程序与远程主机建立连接,然后向远程主机发出传输命令,远程主机在收到命令后就给予响应,并执行正确的命令。
但是FTP有一个根本的限制,那就是,如果用户在某个主机上没有注册获得授权,即没有用户名和口令,就不能与该主机进行文件传输。
但匿名FTP服务器除外,它能够使用户与远程主机建立连接并以匿名身份从远程主机上拷贝文件,而不必是该远程主机的注册用户。
用户使用特殊的用户名“Anonymous”或“guest”就可有限制地访问远程主机上公开的文件。
现在许多系统要求用户将Emai1地址作为口令,以便更好地对访问者进行跟综。
出于安全的目的,大部分匿名FTP主机一般只允许远程用户下载文件,而不允许上载文件。
也就是说,用户只能从匿名FTP主机拷贝其需要的文件而不能把文件拷贝到匿名FTP主机。
另外,匿名FTP主机还采用了其他一些保护措施以保护自己的文件不至于被用户修改和删除,并防止计算机病毒的侵入。
匿名FTP一直是Internet上获取信息资源的最主要方式,在Internet成千上万的匿名FTP主机中存储着无以计数的文件,这些文件包含了各种各样的信息、数据和软件。
人们只要知道特定信息资源的主机地址,就可以用匿名FTP登陆。
2.2FTP工作模式
FTP采用C/S(客户端/服务器)模式进行通信,但与其他的C/S模式网络通信协议又有一个很大的区别。
通常在进行HTTP通信或是TELNET通信的时候,只需要一个端口进行通信。
即客户端只需要连接一个端口进行数据通信。
如TELNET的默认端口是23,用户从头到尾都只需使用这个端口。
但是FTP通信除了有一个默认端口21之外,还需要其他的端口。
其中默认端口(21)主要进行控制连接,进行命令协议和服务器端的响应码的传输;
另外一个非标准端口主要进行数据传递,如文件的上载、下载等。
至于非标准端口的产生则要根据用户选择的连接模式而定:
如果客户选择的是主动模式(PORT),则需要用户端提供给服务器一个IP地址和一个非标准端口;
而如果用户采用被动模式(PASV),则服务器端需要提供给客户端一个IP地址和一个非标准端口。
下表是几个著名的TCP端口号:
表2TCP端口号
TCP端口号
关键字
描述
21
FTP
文件传输协议控制
FTP中字节大小有两个:
逻辑字节大小和用于传输的字节大小。
后者通常是8位,而前者可不一定是多少了。
传输字节不必等于逻辑字节大小,也不必对数据结构进行解释。
控制连接是建立在USER-PIT和SERVER-PI之间用于交换命令与应答的通信链路。
数据连接是传输数据的全双工连接,传输数据可以发生在服务器DTP和用户DTP之间也可以发生在两个服务器DTP之间,FTP可以传输非连续的文件,这些文件的一部分称为页。
服务器DTP代表一种传输过程,它通常处于“主动”状态,它和侦听端口建立数据连接,它还可以为传输和存储设置参数,并根据PI的指令传输数据。
当然,DTP也可以转入“被动”状态。
服务器FTP进程,它是和用户FTP进程一起工作的,它由PI和DTP组成。
在开始阶段,标准FTP命令由用户PI产生并通过控制连接传送到服务器进程。
服务器PI向用户PI返回标准应答。
FTP命令指定数据连接参数和文件系统操作。
用户DTP在特定数据端口侦听,服务器开始数据连接并以指定的参数开始数据传输。
数据端口不必在开始FTP命令的机器上,但用户或用户FTP进程必须确定它在指定的数据端口上侦听.这个数据连接是全双工的。
2.3FTP传输模式
FTP协议的任务是从一台计算机将文件传送到另一台计算机,它与这两台计算机所处的位置、联接的方式、甚至是是否使用相同的操作系统无关。
假设两台计算机通过ftp协议对话,并且能访问Internet,你可以用ftp命令来传输文件。
每种操作系统使用上有某一些细微差别,但是每种协议基本的命令结构是相同的。
FTP的传输有两种方式:
ASCII传输模式和二进制数据传输模式。
2.3.1ASCII传输方式
假定用户正在拷贝的文件包含的简单ASCII码文本,如果在远程机器上运行的不是UNIX,当文件传输时ftp通常会自动地调整文件的内容以便于把文件解释成另外那台计算机存储文本文件的格式。
但是常常有这样的情况,用户正在传输的文件包含的不是文本文件,它们可能是程序,数据库,字处理文件或者压缩文件(尽管字处理文件包含的大部分是文本,其中也包含有指示页尺寸,字库等信息的非打印字符)。
在拷贝任何非文本文件之前,用binary命令告诉ftp逐字拷贝,不要对这些文件进行处理。
2.3.2二进制传输方式
在二进制传输中,保存文件的位序,以便原始和拷贝的是逐位一一对应的。
即使目的地机器上包含位序列的文件是没意义的。
例如,macintosh以二进制方式传送可执行文件到Windows系统,在对方系统上,此文件不能执行。
如果你在ASCII方式下传输二进制文件,即使不需要也仍会转译。
这会使传输稍微变慢,也会损坏数据,使文件变得不能用。
3FTP客户端的设计
3.1总体设计
3.1.1设计目的
FTP早已应用在网络的各个方面,比如我们在访问网络上的资源时,经常会遇到需要连接FTP服务器来下载,或者你制作了一个网站,想要将其上传至服务器,让大家能够访问它,这个时候就会用到FTP客户端。
虽然平时使用windows自带的IE浏览器即可实现对FTP服务器的访问,但是IE只是个很粗糙的FTP客户端。
IE浏览器在6.0以下的版本不支持PASV方式访问服务器,而且IE浏览器在登录FTP服务器的时候,无法查看返回的信息,在出错的时候,无法找到错误的原因,因此在使用上很不方便。
现在大多数的FTP客户端软件都是收费版的,而且以英文版居多,使用上操作很复杂,目前流行的有CoreFtp、AceFtp、FtpVoyager等,但是大多数用户并不习惯使用这些软件。
本文所设计的FTP客户端则适合大多数用户使用,界面设计的很简单,使用户可以一目了然,而且具备FTP客户端的基本功能,可以作为下载、上传文件的工具来使用。
3.1.2设计工具
程序设计中用到的主要工具就是C++,C++是一种面向对象的新一代网络编程语言,它可以在各种不同的机器、操作系统的网络环境中进行开发,具有解释型语言(如Basic语言)和编译型语言(如C语言)的特性。
C++中各种利大于弊的功能和许多很少用到的功能,用C++开发的程序可以在网络上传输,并运行于任何客户机上。
使用C++语言可以方便的设计出网络应用类的程序,而且C++的移植性很好,在、其应用程序在各种机器上都能无差别的执行。
为了使FTP客户端能适应大多数平台下的使用,选择使用C++语言来实现。
3.2ftp客户端详细设计
3.2.1客户端连接模块
运行客户端后,首先是连接服务器,需要输入服务器IP地址,用户名和密码,然后点击连接服务器,观察是否连接成功,若成功则显示服务器端的文件的列表。
若连接失败,则抛出异常,弹出对话框显示出错误,可知如何修改,然后重新输入服务器IP地址或用户名或密码,直到连接上服务器。
下图为客户端连接流程图:
图3-1客户端连接流程图
服务器模块的关键代码为:
voidCMyFtpDlg:
:
OnConnect()
{
UpdateData(TRUE);
//新建对话
m_pInetSession=newCInternetSession(AfxGetAppName(),1,PRE_CONFIG_INTERNET_ACCESS);
try
{
//新建连接对象
m_pFtpConnection=m_pInetSession->
GetFtpConnection(m_strServer,m_strUserName,
m_strPassword);
}
catch(CInternetException*pEx)
{
//获取错误
TCHARszError[1024];
if(pEx->
GetErrorMessage(szError,1024))
AfxMessageBox(szError);
else
AfxMessageBox("
Therewasanexception"
);
pEx->
Delete();
m_pFtpConnection=NULL;
return;
}
m_pRemoteFinder=newCFtpFileFind(m_pFtpConnection);
//获得服务器根目录的所有文件并在列表框中显示
BrowseDir("
"
&
m_ctrlRemoteFiles,m_pRemoteFinder,&
m_arrRemoteFiles);
}
3.2.2上传模块
用户在连接上服务器后,可以在本地列表中选择需要上传的文件,并指定上传位置,将本机上的文件上传至FTP服务器。
不能选择文件夹,只能选择文件。
若上传失败,则抛出异常;
如果成功上传,则提示上传成功。
并通过断开与远程服务器的连接。
下图为上传子模块流程图:
图3-2上传模块流程图
上传模块的主要代码为:
UpFile(FILEITEMfileItem)
if(fileItem.bDir==TRUE)
AfxMessageBox("
本程序暂时不支持上传整个文件夹,请选择文件上载"
else
test"
//格式化文件名
CStringstrLocalFile,strRemoteFile;
strRemoteFile.Format("
%s\\%s"
m_pRemoteFinder->
GetRoot(),fileItem.strFileName);
strLocalFile.Format("
m_LocalFinder.GetRoot(),fileItem.strFileName);
//上传
if(m_pFtpConnection->
GetFile(strLocalFile,strRemoteFile))
{
CStringstrMsg;
strMsg.Format("
上载文件%s成功!
fileItem.strFileName);
AfxMessageBox(strMsg);
}
3.2.3下载模块
当用户在服务器文件列表中选择想要下载的文件后,选择需要下载文件在本机上的存储位置,设置上传模式为被动模式;
将服务器上的文件下载至本机,如果成功下载,则提示下载成功,若失败则抛出异常,此过程可连续进行直到想退出。
下图为下载子模块流程图:
图3-2下载模块流程图
下载模块的主要代码:
DownFile(FILEITEMfileItem)
本程序暂时不支持下载整个文件夹,请选择文件下载"
//下载
GetFile(strRemoteFile,strLocalFile))
下载文件%s成功!
4ftp客户端测试分析
4.1运行方法
在程序中输入服务器的IP、用户名、和密码,点击“连接服务器”按钮即可等待连接服务器。
然后可选择本地文件上传到服务器或选择服务器文件下载到本地。
4.2运行结果
FTP服务器连接前和连接后,此过程要正确的输入服务器IP地址,用户名和密码,本地文件栏的文件为本机D盘的内容,连接成功后在远程文件栏会出现服务器上的文件,则也标志着连接成功:
图4-1ftp服务器连接前
图4-2ftp服务器连接后
如果未选择文件就点击“上传”按钮就会弹出对话框,“请选择要上传的文件”,如果想选择文件可先选中文件夹,后点击“下一目录”来选择:
图4-3选择文件夹
选择文件后,点击“上传”或“下载”即可实现上传和下载,上传或下载的文件都可在远程文件或本地文件里查找到,如果上传或下载成功会有提示:
图4-4上传和下载
图4-5使用说明
5设计总结
在指导老师的监督下,经过图书馆和网上查找各种资料以及学到的知识,通过紧张的设计与开发,本次课程设计——简易FTP客户端的设计与实现终于完成了,虽然该系统功能上还有很多的不足,但通过钻研,设计模块,解决开发过程中遇到的各种困难,最后实现了该系统的基本功能。
其次操作页面简洁易懂;
此系统实现了远程登录服务器、浏览本地与服务器目录文件等功能需求,从而实现了一个简易的FTP客户端软件。
通过我们自己实际设计一个FTP客户端软件,使我们了解了FTP的发展历史以及工作原理,对FTP协议在网络中的结构和本身协议在传输的作用有了更深的认识。
通过系统的实现,我们又了解了软件实现的理论知识,理解了实现的概念,了解了实现的方法以及过程,虽然只是有限的尝试和使用,但都会对以后做类似的项目起到了积极的指导作用。
同样通过这次的课程设计,对FTP这种网络程序的设计,我们都发现了自己在学习上的不足,认识到了知识的重要性,体会到只有不断的充实自己,不断的挑战自己,才能获得更好的收获。
参考文献
[1]谢希仁.计算机网络(第五版)[M].北京:
电子工业出版社,2008:
232—23.
[2]程国君.计算机网络实验教程[M]北京:
清华大学出版社,2008:
79—104.
[3]黄嘉辉.VisualBasic.NET网络程序设计[M]北京:
清华大学出版社,2003:
17—268
[4]吴光明.使用开发FTP客户端应用程序[J].河北理工学院学报,2005:
59—64
[5]
[6]
附录
核心代码:
//MyFtpDlg.h:
headerfile
//
#if!
defined(AFX_MYFTPDLG_H__D3975D47_86C5_11D6_8F32_00E04CE76240__INCLUDED_)
#defineAFX_MYFTPDLG_H__D3975D47_86C5_11D6_8F32_00E04CE76240__INCLUDED_
#if_MSC_VER>
1000
#pragmaonce
#endif//_MSC_VER>
/////////////////////////////////////////////////////////////////////////////
//CMyFtpDlgdialog
//保存文件信息
typedefstructFileItem
intnItem;
//在列表框中的索引
BOOLbDir;
//是文件夹?
CStringstrFileName;
//文件名
}FILEITEM;
classCMyFtpDlg:
publicCDialog
//Construction
public:
CMyFtpDlg(CWnd*pParent=NULL);
//standardconstructor
//DialogData
//{{AFX_DATA(CMyFtpDlg)
enum{IDD=IDD_MYFTP_DIALOG};
CListCtrlm_ctrlRemoteFiles;
//ClistCtrl构造一个CListCtrl对象。
//Create创建列表控件并将其附加给CListCtrl对象
CListCtrlm_ctrlLocalFiles;
CStringm_strPassword;
CStringm_strServer;
CStringm_strUserName;
//}}AFX_DATA
protected:
virtualvoidDoDataExchange(CDataExchange*pDX);
//DDX/DDVsupport
//}}AFX_VIRTUAL
//Implementation
protected:
HICONm_hIcon;
CInternetSession*m_pInetSession;
//会话对象
CFtpConnection*m_pFtpConnection;
//连接对象
CFtpFileFind*m_pRemoteFinder;
//远程查找文件对象
CFileFindm_LocalFinder;
//本地查找文件对象
CStringm_strLocalParentRoot;
//本地文件目录的上上一层目录
CStringm_strRemoteParentRoot;
//远程文件目录的上上一层目录
/**CArray即为其中的一个,用来实现动态数组的功能。
CArray是从CObject派生,有两个模板参数,
*第一个参数就是CArray类数组元素的变量类型,后一个是函数调用时的参数类型。
*/
CArray<
FILEITEM,FILEITEM&
>
m_arrLocalFiles;
//保存本地文件信息
m_arrRemoteFiles;
//保存远程文件信息
//遍历文件下的所有子文件
voidBrowseDir(CStringstrDir,CListCtrl*pLstCtrl,CFileFind*pFinder,CArray<
*pFilesArr);
voidDownFile(FILEITEMfileItem);
voidUpFile(FILEITEMfileItem);
voidAddItem(CListCtrl*pLstCtrl,intnIndex,BOOLbDir,CStringstrText);
voidSetListCtrlStyle(CListCtrl*pLstCtrl);
voidAddHeaders(CListCtrl*pLstCtrl);
//Generatedmessagemapfunctions
//{{AFX_MSG(CMyFtpDlg)
virtualBOOLOnInitDialog();
afx_msgvoidOnSysCommand(UINTnID,LPARAMlParam);
afx_m