设为首页 加入收藏

TOP

4.2.1 连接FTP服务器
2013-10-07 13:00:36 来源: 作者: 【 】 浏览:82
Tags:4.2.1 连接 FTP 服务器

4.2  登录FTP服务器

在对FTP文件进行相关处理之前,用户必须在成功连接、登录服务器以后,才可以执行相关的操作。本节将主要讲述FTP的连接以及登录验证过程,选择的连接模式是PASV(被动)模式,登录方式是用户名登录。

4.2.1  连接FTP服务器

因为FTP连接是基于Windows套接字编程(www.cppentry.com)的,所以FTP的连接过程和Socket连接一样。也就是客户端创建连接套接字以后,调用函数Connect()向服务器发送连接请求。用户需要特别注意的是待服务器同意连接并返回后,客户端必须先发送一个空字符串到服务器进行初始化,这样才能进行数据的交换。在连接FTP服务器程序的开发中,用户需要用到MFC的一些类或函数,如CSocket类。

1.实例化CSocket

CSocket类是MFC对Windows套接字的一个封装类。一般,它使用类中的构造函数来实例化对象。但是在实际编程(www.cppentry.com)中,构造函数常使用new关键字来调用,构造一个没有初始化的套接字对象。例如,代码如下:

  1. CSocket m_clientsocket=new CSocket;     //构造一个套接字对象m_clientsocket 

构造该对象后,必须调用成员函数Create()创建完整的套接字句柄。其函数原型为:

  1. BOOL CSocket::Create(UINT nSocketPort,  
  2. int nSocketType=SOCK_STREAM,LPCTSTR lpszSocketAddress=NULL); 

在该函数中,参数nSockPort用来指定与套接字相关联的本地端口号,默认值为0,本章实例中均设置为FTP的默认端口21。nSocketType指定套接字类型,默认为SOCK_STREAM表示创建流式套接字,FTP客户端均采用默认类型。lpszSocketAddress指定创建套接字的网络地址,默认为NULL,客户端一般设置为NULL。该函数调用成功返回非0值,否则返回0,表示出错。

2.实现连接功能

用户创建套接字对象以后,就可以调用函数去实现真正的连接了。在CSocket类中,实现连接功能的函数是Connect(),其函数原型如下:

  1. BOOL Connect(LPCSTR lpszHostAddress,UINT nHostPort); 

参数lpszHostAddress指定将要连接的服务器地址;nHostPort指定将要连接服务器上的端口号。注意,一般在FTP编程(www.cppentry.com)中都将此参数设置为21号端口。该函数连接服务器成功,则返回true,否则返回false。例如,用户需要连接一个IP地址为"218.6.132.5"的服务器,则其代码如下:

  1. CSocket  *m_clientsocket=new CSocket();             //构造连接套接字对象  
  2. m_clientsocket->Create(21,SOCK_STREAM,FD_READ|FD_WRITE,NULL);     
  3.                                                     //创建流式套接字  
  4. m_clientsocket->Connect("218.6.132.5",21);      //连接服务器 

这段代码的作用是创建套接字对象以后,调用函数Connect()进行连接服务器的操作。

3.封装连接过程

本节中,FTP的连接过程主要由自定义函数FTPConnect()实现。函数FTPConnect()的作用是根据用户输入的服务器地址和端口号,连接FTP服务器。其返回值表示操作是否成功。其具体代码如下:

  1. //连接服务器函数,参数severhost 表示服务器IP地址,port指定要连接的服务器端口  
  2. BOOL FTPConnect(CString severhost,int port)  
  3. {   
  4. CSocket  *m_clientsocket=new CSocket();         //构造连接套接字对象  
  5. m_clientsocket->Create(21,SOCK_STREAM,FD_READ|FD_WRITE,NULL);   
  6. if(!m_clientsocket)                                 //判断套接字对象创建是否成功  
  7. { MessageBox("套接字创建失败!");   
  8. return false; }                             //创建m_clientsocket失败    
  9.   if(!(m_clientsocket->Connect(severhost,port))) return
    false;           //连接FTP服务器  
  10.     else  
  11. { return true;}                             //连接成功将返回true  

在该函数中,参数severhost和port分别指定要连接服务器的地址和端口。程序首先创建流式套接字m_clientsocket,然后调用CSocket类的函数Connect()连接FTP服务器。当连接失败时,函数返回false;否则,返回true。

自定义函数FTPConnect()封装完成后便可以对其进行调用。代码如下:

  1. Void OnConnect()  
  2. { CString address="218.6.132.5";            //定义IP地址字符串变量并初始化  
  3.   int port=21;                                  //定义端口变量并初始化                              
  4. if(!(FTPConnect((LPCSTR)address,port))) //判断FTPConnect调用是否成功  
  5. {  MessageBox("连接失败!");}                    //提示失败   
  6. else  
  7. {MessageBox("连接服务器成功!");}               //否则提示成功  

函数OnConnect()根据定义的IP地址和端口号,调用自定义函数FTPConnect()连接服务器。其中,IP地址和端口号可以由用户进行自定义。以上代码实现了客户端连接服务器的基本功能。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇4.2.2 登录FTP服务器 下一篇6.7.5 使用sysconf( )

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: