visualc网络编程案例实战之ftp客户端

上传人:tia****nde 文档编号:117083966 上传时间:2019-11-18 格式:PPTX 页数:51 大小:3.10MB
返回 下载 相关 举报
visualc网络编程案例实战之ftp客户端_第1页
第1页 / 共51页
visualc网络编程案例实战之ftp客户端_第2页
第2页 / 共51页
visualc网络编程案例实战之ftp客户端_第3页
第3页 / 共51页
visualc网络编程案例实战之ftp客户端_第4页
第4页 / 共51页
visualc网络编程案例实战之ftp客户端_第5页
第5页 / 共51页
点击查看更多>>
资源描述

《visualc网络编程案例实战之ftp客户端》由会员分享,可在线阅读,更多相关《visualc网络编程案例实战之ftp客户端(51页珍藏版)》请在金锄头文库上搜索。

1、第4章FTP客户端本章将带领大家编写一个简单的FTP客户端程序,实现简单的功能:登录FTP服务器,处理服务器上的文件,如上传、下载,最后安全退出服务器。先弄清楚原理,然后我们再考虑怎样去实现。4.1FTP工作原理FTP的工作原理跟TCP一样,客户端需要先与服务器连接,等待服务器的应答,最后再建立数据通道。所以,FTP浏览器在和服务器建立连接时也需要经过“三次握手”的过程。这表示客户端与服务器之间的连接是可靠、安全的,这也为数据传输提供了可靠的保证。FTP的工作原理如图4.1所示。图4.1FTP工作原理图4.1.1FTP数据结构进行FTP编程之前,用户首先需要知道FTP有哪些数据结构。由于在某些

2、主机上保存的文件是面向字节的,某些是面向记录的。所以在FTP中,除了有不同的数据类型以外,还有几种不同的文件结构类型。这样做的目的是为了在不同的主机之间传送文件时能够相互识别。二进制结构:文件中没有内部结构,一般被看作二进制流。文件式结构:由许多记录组成的文件。页面结构:由不同的索引页组成文件。注意:一般情况下,如果没有使用FTP命令去设置文件的结构,则默认的结构是文件式结构。4.1.2FTP数据传输模式在FTP的数据传输中,传输模式将决定文件数据会以什么方式被发送出去。一般情况下,网络传输模式有3种:将数据格式化后传送、压缩后传送、不做任何处理进行传送。当然不论用什么模式进行传送,在数据的结

3、尾处都是以EOF结束。在FTP中定义的传输模式有以下几种。1二进制模式二进制模式就是将发送数据的内容转换为二进制表示后再进行传送。这种传输模式下没有数据结构类型的限制。在二进制结构中,发送方发送完数据后,会在关闭连接时标记EOF。如果是文件结构,EOF被表示为双字节。其中第一个字节为0,而控制信息包含在后一个字节内。本书中如无特别说明,均采用该模式进行传输数据。2文件模式文件模式就是以文件结构的形式进行数据传输。文件结构是指用一些特定标记来描述文件的属性以及内容。一般情况下,文件结构都有自己的信息头,其中包括计数信息和描述信息。信息头大多以结构体的形式出现。计数信息:计数指明了文件结构中的字节

4、总数。描述信息:描述信息是负责对文件结构中的一些数据进行描述。例如,其中的数据校验标记是为了在不同主机间交换特定的数据时,不论本地文件是否发生错误都进行发送。但在发送时发送方需要给出校验码,以确定数据发送到接收方时的完整性、准确性。在文件结构中,既可以用记录结构,也可以用相对应的数据表示。文件的信息头结构如表4.1所示。表4.1文件的信息头结构描述信息是由字节中的位特定标记值来说明。列举几个特定标记值及其意义,如表4.2所示。文件信息头计数信息大小文件信息头描述信息大小计数信息占16位字节描述信息占8位字节表4.2特定标记值及意义由表4.2可知,描述信息中可能存在多个标记值,所以必须将需要用到

5、的标记都进行设置。标记值意义64表示文件的结结束符标记标记EOF32表示文件中有可疑错误错误16表示具有重发标记的文件3压缩模式在这种模式下,需要传送的信息包括一般数据、压缩数据和控制命令。一般数据:以字节的形式进行传送。压缩数据:包括数据副本和数据过滤器。控制命令:用两个转义字符进行传送。注意:此种传输模式请参考其他相关书籍,本书不再进行深入讲解。在FTP数据传输时,发送方必须把数据转换为文件结构指定的形式再传送出去,而接收方则相反。因为进行这样的转换很慢,所以一般在相同的系统中传送文本文件时都采用二进制流表示比较合适。4.1.3与服务器进行连接FTP客户端需要与服务器连接成功后,才能进行文

6、件数据的传输。当连接时,客户端需要用户指定端口、连接模式等操作。1连接所使用的端口在连接端口的使用上,FTP与HTTP不同。因为FTP在与服务器连接时需要用到两个端口:其中一个端口(FTP的默认端口是21)作为控制连接端口,它主要用于发送命令给服务器以及等待服务器的响应;另一个端口是数据传输端口,端口号为20或者任意有效端口号,用来建立数据传送通道。2连接模式FTP客户端连接服务器的模式有两种:PORT模式和PASV模式。PORT模式:PORT是主动模式。当客户端选择这种模式与服务器进行连接的时候,它需要向服务器提供一个IP地址和一个端口号。PASV模式:PASV是被动模式。当选择这种模式连接

7、时,服务器需要提供给客户端一个IP地址和一个端口号。用户平时从网上一个指定的FTP地址和端口下载文件就是这种模式的一种实际应用,相反则为PORT模式。注意:在本章中如无特别说明,所选用的连接模式均是被动模式。4.1.4登录验证在连接FTP服务器成功之后,用户需要发送相关命令或者是数据流到服务器进行身份验证或其他操作。在本章的4.1.6小节中,给出了一些常用的FTP命令。1登录方式在登录FTP时,登录方式有匿名登录、代理登录或者是通过用户名登录等。各种登录方式的不同在于访问文件的权限(只读、只写或者读写),这也是FTP的一个重要特点。注意:在本章中涉及到的登录方式主要是以用户名登录为主。2验证客

8、户端将用户名和密码以命令的方式发送到服务器进行验证,例如,用户名为“lymlrl”,密码为“123456”的用户在进行验证时,将其转换成命令流:“USER”+lymlrl+“PASS”+123456;这个命令将作为字符串被发送到服务器,这个工作是通过CArchive等类中的函数实现的(具体内容将在4.3节中讲解)。服务器在验证之后会返回结果给客户端。如果返回值的第一个数字为1、2或者是3,则表示返回值正确,否则发生错误。然后提取当前位置的下一条命令值,如果为EROR表示出现用户名或密码错误;为SUSS则表示验证成功。4.1.5关闭数据连接通常情况下,服务器只负责进行数据连接,并对它进行初始化和

9、关闭。除非客户端在命令控制中主动要求关闭连接时,服务器才会关闭连接。当然服务器也会在以下情况下关闭数据连接。当服务器发送数据结束时,会通过EOF终止传送;客户端发送ABORT命令;客户端改变了端口号;控制连接通道被关闭;传输过程中发生严重错误。但是,在一般情况下客户端与服务器之间的连接都是在数据正常处理完成以后关闭的。4.1.6FTP常用命令在实际编程中,有些复杂的操作,只是需要客户端发送相关的指令到服务器执行即可。所以,对于用户来说掌握常用的FTP命令是非常重要的。下面列举了一些常用的FTP命令,如表4.3所示。表4.3常用FTP命令及意义在表4.3中,已经列举了部分常用的FTP命令。通常情

10、况下,客户端通过CArchive类的成员函数WriteString()可以将这些命令以字符串的形式发送到服务器执行。然后,客户端使用CArchive类的成员函数ReadString()来获取服务器返回的数据。关于这两个函数的一些用法将在下一节实例中进行讲解。FTP命令意义LIST发发送当前工作目录录下的文件名列表到客户户端PWD显显示服务务器的当前工作目录录名RETR从服务务器下载载一个文件STOR上传传文本文件到服务务器,如果文件存在会被覆盖STOU上传传文本文件到服务务器,但不会覆盖已经经存在的文件STRU设设置文件的结结构MODE指定数据的传输传输模式ABORT通知服务器关闭连接4.1.

11、7数据校验与重发控制FTP是属于TCPIP簇中的一种具体应用,所以FTP也具有数据重发机制。但在FTP中,数据重发仅用于文件和压缩模式。一般情况下,重发机制都要求发送者在发送数据时加入特定标记来描述数据的重要信息。并且该标记只针对发送者有意义,其内容大多是用来校验数据的完整性。特定标记可以表示任何可以标记的属性或其他信息。如果接收方也支持重发机制,那么接收方系统中将会保存这一特定标记。当系统重新启动或者其他原因造成系统重启,用户均可以根据原来的标记继续传送数据。其实,用户经常用到的断点续传就是很好的一个例子。当接收方收到一段数据后,记下标记,如果传送过程中出现错误,那么发送方将会从这个标记点重

12、新传送数据。4.2FTP客户端实例接下来我将带领大家一步步完成FTP客户端的编写,毕竟这才是本章最主要部分。4.2.1创建工程创建基于对话框的应用程序,命名为FTP_client。程序的界面设计及各个关键控件的ID如图4.2所示。图4.2客户端程序界面及控件ID部分控件关联的变量如图4.3所示。图4.3部分控件ID及关联的变量为类CFTP_clientDlg定义两个公有的成员变量,如下:4.2.2连接和登陆验证用户需要通过客户端来连接FTP服务器,然后登录。这样才能对FTP服务器上的文件进行操作。1.实现连接和登陆验证添加“连接服务器”按钮的消息响应函数OnConnect(),代码如下:用户使

13、用该软件时首先应该填写主机、端口、用户名和密码信息,便于与指定的服务器连接,然后完成登陆验证。连接和登陆的验证过程如图4.4所示。图4.4连接和登陆验证过程示意图响应函数OnConnect()用到了MFC中的类CSocket的对象sock_client,它的大部分功能继承自类CAsyncSocket,实际上代码中sock_client对象调用的函数都继承自CAsyncSocket。功能实现过程:(1)调用成员函数Create()创建了socket,用于向服务器发送命令和接收来自FTP服务器的响应。(2)调用成员函数Connect()连接FTP服务器,需要向函数提供FTP服务器的IP和端口号。(

14、3)调用我们自己将要封装的2个函数MySockSend()和MySockRecv(),发送用户名和密码,并接收来自FTP服务器的响应。(4)禁用相关的文本编辑框和按钮,防止用户再做修改困扰我们的程序。2.封装发送命令函数为类CFTP_clientDlg添加公有成员函数MySockSend(),用于发送命令信息,代码如下:函数MySockSend()以发送的命令为参数,功能包括:调用类CSocket的成员函数Send()发送命令;添加命令到ListBox上,方便用户知道程序做了什么,这里用到了类CListBox的成员函数AddString()。3.封装接收响应函数为类CFTP_clientDlg

15、添加公有成员函数MySockRecv(),用于接收来自FTP服务器的响应消息,代码如下:函数MySockRecv()没有参数,功能包括:调用类CSocket的成员函数Receive()接收来自FTP服务器的响应消息;添加响应消息到ListBox上,方便用户知道服务器的应答。程序连接FTP服务器的运行效果如图4.5所示。图4.5程序连接FTP服务器的运行效果4.2.3更新文件列表客户端可以发送命令LIST到FTP服务器,服务器会告知客户端:用户的根目录下到底有哪些文件。文件的信息是通过客户端与服务器端建立的数据连接传送的,传完连接会被关闭。1.让服务器进入被动模式(PASV)在主动模式(PORT

16、)下,FTP的客户端只是告诉服务器自己的端口号,让服务器来连接客户端指定的端口。对于客户端的防火墙来说,这是从外部到内部的连接,可能会被阻塞。为了解决服务器发起到客户的连接问题,有了另一种FTP连接方式,即被动方式。命令连接和数据连接都由客户端发起,这样就解决了从服务器到客户端的数据端口的连接被防火墙过滤的问题。下面我们要在类CFTP_clientDlg中添加公有的成员函数Pasv_mode(),用来实现这一功能,函数封装如下:虽然代码看起来有些多(至少我这么认为),但客户端和服务器端的交互还是很简单的,如图4.6所示。图4.6客户端和服务器端的交互但函数Pasv_mode()实现的功能还是比较简单的:(1)发送命令让FTP服务器进入被动模式(PASV),服务器会新开一个端口号等待客户端的连接。(2)从服务器返回的响应中取出数据,然后计算端口号。(3)客户端创建一个临时的套接字sock_temp连接服务器新开的端口。2.更

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号