设为首页 加入收藏

TOP

3.3.4 获取FTP服务器文件信息(1)
2013-10-07 15:55:31 来源: 作者: 【 】 浏览:78
Tags:3.3.4 获取 FTP 服务器 文件 信息

3.3.4  获取FTP服务器文件信息(1)

当用户编程(www.cppentry.com)时,需要获取FTP服务器文件的列表,以便查看文件的相关信息。在接下来的内容中,将讲解怎样获取FTP服务器文件的相关知识。

(1) 获取文件列表

一般情况下,FTP文件列表信息是通过客户端和服务器端之间的数据通道获取的。编程(www.cppentry.com)中,用户可以向服务器发送LIST命令,服务器接收到该命令以后会向客户端返回FTP目录下的文件列表信息。用户需要注意,在PORT模式下传输数据时,客户端需要向服务器提交本地IP地址和用于返回数据的端口号:

  1. CSocket m_Client;           //客户端套接字变量    
  2. CString m_host;             //IP地址字符串变量    
  3. UINT nport, port=111;      //端口号    
  4. m_Client.GetSockName(m_host, nport);           //调用函数获得本地的IP地址    
  5. m_host.Format(m_host + ",%d", port);           //格式化字符串  

用户使用PORT命令可以向服务器发送端口号码。格式如"PORT"+string。其中string表示已经格式化的IP和端口字符串。例如下面的代码:
  1. m_archive->WriteString("PORT " + m_host + "\r\n");    
  2.                //调用CArchive类的WriteString()函数发送    
  3. m_archive->Flush();   

当客户端发送端口之后,必须在该端口上进行监听,以便接受服务器的连接请求。用户需要注意,在服务器和客户端连接关闭以前,服务器均按照此次的IP和端口与客户端进行数据交换。监听代码如下:
  1. m_Client.Create(111, SOCK_STREAM, NULL);     //创建在111端口上监听的套接字    
  2. m_Client.Listen();          //进行监听   

此时即可向服务器发送LIST命令获取相关文件的信息,发送LIST命令的代码如下:
  1. Try    
  2. {   //尝试发送命令LIST到服务器,以获取文件列表    
  3. m_archive->WriteString("LIST " + "\r\n");    
  4. //调用CArchive类的WriteString()函数发送LIST命令    
  5. m_archive->Flush();    
  6. }    
  7. Catch(CException e)    
  8. { MessageBox("发送关闭命令失败!");  }          //抛出错误并处理错误   

当用户向服务器发送LIST命令后,服务器会向客户端提供的IP地址和端口号发出连接请求。所以,当客户端在指定端口上监听到连接请求后,应该对该连接进行处理。

在一般情况下,可以将套接字设置为非阻塞模式以避免出现等待状态。当监听套接字检测到有连接请求到来时才响应,否则套接字一直处于监听状态。可以使用AP函数Accept()来响应服务器的连接请求。

例如下面的代码:

  1. #define WM_ACCEPT WM_USER+100               //自定义消息,用于响应连接请求    
  2. afx_msg void OnAccept(WPARAM wParam, LPARAM lParam)  //声明响应连接请求的函数    
  3. ...    //省略部分代码    
  4. BEGIN_MESSAGE_MAP(CMyApp, CWinApp)    
  5. //{{AFX_MSG_MAP(CMyApp)    
  6.   //}}AFX_MSG    
  7. ON_COMMAND(ID_HELP, CWinApp::OnHelp)    
  8. ON_MESSAGE(WM_ACCEPT, OnAccept)         //处理消息映射    
  9. END_MESSAGE_MAP()   

首先需要自定义消息WM_ACCEPT,用于响应连接请求,然后添加消息映射,将自定义消息和实现函数关联起来。在Win32 API中,通过WSAAsyncSelect()函数可以将套接字设置为非阻塞模式,其语法格式如下:
  1. int WSAAsyncSelect(SOCKET s, HWND hWnd, int wMsg, long lEvent);  

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇3.3.3 使用CArchive类进行序列化.. 下一篇3.3.4 获取FTP服务器文件信息(2)

评论

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

·工业机器人TCP校准中 (2025-12-25 05:19:17)
·opc 通讯协议与 TCP (2025-12-25 05:19:15)
·labview中tcp/ip通信 (2025-12-25 05:19:13)
·新书介绍《Python数 (2025-12-25 04:49:47)
·怎么利用 Python 进 (2025-12-25 04:49:45)