项目源码,可执行软件,详细的说明报告文档等获取地址: FTP客户端和服务器——基于标准FTP文件传输协议C#socket编程开发的软件 界面演示登录首先需要启动服务器,填写服务器地址以及用户名和密码,点击登录验证成功即可登录。服务器:编辑编辑 客户端:编辑上传文件如图所示,向服务器上传CarMSAPI.zip文件。上传成功后,点击确认按钮以后就可以自动刷新文件列表:服务器https://mbd.pub/o/bread/mbd-ZpmWl59x
概述
在Visual Studio 2019开发环境下,基于Windows平台和标准FTP协议,编程语言为C#,通过socket编程开发基于标准FTP文件传输协议FTP客户端和服务器,实现了文件上传、文件下载、断点续传等功能。
原理
FTP协议
FTP(File Transfer Protocol,文件传输协议) 是 TCP/IP 协议组中的协议之一。FTP协议是用于在网络上进行文件传输的一套标准协议,它工作在 OSI 模型的第七层, TCP 模型的第四层, 即应用层。FTP协议使用 TCP 传输, 客户在和服务器建立连接前要经过一个“三次握手”的过程,保证客户与服务器之间的连接是可靠的且面向连接的,这为数据传输提供了可靠保证。
FTP协议包括两个组成部分,其一为FTP服务器,其二为FTP客户端。其中FTP服务器用来存储文件,用户可以使用FTP客户端通过FTP协议访问位于FTP服务器上的资源。在开发网站的时候,通常利用FTP协议把网页或程序传到Web服务器上。此外,由于FTP传输效率非常高,在网络上传输大的文件时,一般也采用该协议。
默认情况下FTP协议使用TCP端口中的20和21这两个端口,其中20用于传输数据,21用于传输控制信息。但是,是否使用20作为传输数据的端口与FTP使用的传输模式有关,如果采用主动模式,那么数据传输端口就是20;如果采用被动模式,则具体最终使用哪个端口要服务器端和客户端协商决定。文件传输协议(File Transfer Protocol,FTP)客户端与服务器端建立数据连接以后,有两种文件传输模式可供选择:主动模式和被动模式,在本次实验中默认采用被动模式。
主动模式 (PORT)
主动模式下,客户端随机打开一个大于 1024 的端口向服务器的命令端口 P,即 21 端口,发起连接,同时开放N +1 端口监听,并向服务器发出“port N+1” 命令,由服务器从它自己的数据端口(20)主动连接到客户端指定的数据端口 (N+1)。
FTP 的客户端只是告诉服务器自己的端口号,让服务器来连接客户端指定的端口。对于客户端的防火墙来说,这是从外部到内部的连接,可能会被阻塞。
被动模式 (PASV)
为了解决服务器发起到客户的连接问题,有了另一种FTP连接方式,即被动方式。命令连接和数据连接都由客户端发起,这样就解决了从服务器到客户端的数据端口的连接被防火墙过滤的问题。
被动模式下,当开启一个FTP连接时,客户端打开两个任意的本地端口(N> 1024和N+1) 。
第一个端口连接服务器的21端口,提交 PASV 命令。然后,服务器会开启一个任意的端口(P>1024),返回如“227 entering passive mode (127,0,0,1,4,18)”。 它返回了227开头的信息,在括号中有以逗号隔开的六个数字,前四个指服务器的地址,最后两个,将倒数第二个乘 256 再加上最后一个数字,这就是 FTP 服务器开放的用来进行数据传输的端口。如得到 227 entering passive mode (h1,h2,h3,h4,p1,p2),那么端口号是 p1*256+p2,IP地址为h1.h2.h3.h4。这意味着在服务器上有一个端口被开放。客户端收到命令取得端口号之后, 会通过N+1号端口连接服务器的端口 P,然后在两个端口之间进行数据传输。
图1-FTP协议组成
图2-FTP协议两端交互
图3-FTP协议两种模式下工作情况
过程
连接与登录
服务器端:
使用字典设置用户名和密码,对所需参数进行初始化操作,将服务器默认主目录设为"C:/NiceFTP/",获取本机IP地址作为服务器地址,将服务器默认端口设为21:
启动服务器,点击启动后可点击停止按钮停止服务器运行:
服务器对连接端口进行监听:
采用被动模式进行传输:
向客户端发送响应码:
验证用户登录密码:
客户端
对所需参数进行初始化操作,获取本机IP地址作为客户端地址:
创建FTP连接:
获得服务器返回的响应体:
登录服务器实现:
。。。。。。
界面演示
登录
首先需要启动服务器,填写服务器地址以及用户名和密码,点击登录验证成功即可登录。
服务器:
客户端:
上传文件
如图所示,向服务器上传CarMSAPI.zip文件。上传成功后,点击确认按钮以后就可以自动刷新文件列表:
服务器:
客户端:
下载文件
在客户端选中要下载的文件,然后点击下载即可将文件下载到本机的相应位置。
服务器:
客户端:
删除文件
在客户端选中服务器中要删除的文件,点击删除即可删除相应的文件。
服务端:
客户端:
上传断点续传
由于FTP传输很快,所以我们选择了大文件Nice.rar上传,该压缩包中第一个文件夹为A,其中有一个A.docx文件,内容为数行字母“A”。上传一会儿后断开连接,然后打开压缩包,打开A.docx,在最前面加上数行字母“B”,然后再压缩,连接服务器,继续上传。上传完毕后打开服务器中的A.docx,发现其中内容仍旧只有数行字母“A”。说明断开的时候已经传输到Nice.rar中后面的文件,A.docx已经传输完毕,断开后再次连接时传输从断点开始,而不是全部重传,说明该FTP支持上传断点续传。
服务器:
客户端:
下载断点续传
由于FTP传输很快,所以我们选择了大文件Cool.rar上传,该压缩包中第一个文件夹为A,其中有一个A.docx文件,内容为数行字母“A”。下载一会儿后断开连接,然后打开压缩包,打开A.docx,在前面加上数行字母“B”,然后再压缩,连接服务器,继续下载。下载完毕后打开客户端中的A.docx,发现其中内容仍旧只有数行字母“A”。说明断开的时候已经传输到Nice.rar中后面的文件,A.docx已经传输完毕,断开后再次连接时传输从断点开始,而不是全部重传,说明该FTP支持下载断点续传。
服务器:
客户端: