基于ftplib的交互式ftp客户端实现

基于ftplib的交互式ftp客户端实现

1.简介

FTP(File Transfer
Protocol)是较为常用的一种协议,用于Internet上的控制文件实现双向传输,为了方便文件的上载、下载等操作,python默认提供了ftplib模块用于ftp客户端的开发实现,本文对ftplib做了二次封装,并自定义了一个控制台支持简单的交互命令,实现服务器连接、登录、目录读取、目前切换、上载、下载,关闭连接等操作。

2.Ftplib

Ftplib是一个ftp客户端操作实现封装,实例化的类名为FTP,本文涉及的FTP类主要包括如下的函数:

方法 说明
Connect 连接指定IP的FTP服务器,
login 以指定账号和密码登录FTP服务器
dir 浏览当前目录下的文件与下一级目录名称
storbinary 上传文件
retrbinary 下载文件
Quit 与服务器断开连接

3.设计实现

整个代码部分主要包括CustomConsole自定义值班台类和FTPClient客户端两个类,CustomConsole为主控,FTPClient为ftp访问的操作实现。

本程序依赖的模块主要包括

import ftplib
import os,socket
import threading

程序的main函数入口书写方式如下

if __name__ == _main_:
c = CustomConsole()
c.start()
c.join()

3.1 CustomConsole类

3.1.1 设计说明

CustomConsole为线程类,持续等待用户输入命令,支持的命令包括conn、login、ls、cd、get、put、quit等命令

  • conn是连接ftp服务器命令,之后需要输入希望连接的ftp服务器的ip

  • login是登录命令,之后需要输入用户名和密码用于登录

  • ls是浏览当前目录下的文件与下一级目录名称的命令

  • cd是切换目录命令,需要输入需要切换的目录名称,目前是实现较简单,只能网下级切换,不支持父目录切换

  • get是下载文件命令,之后需要指定ftp服务器上的待下载文件名称

  • p

// FTPServer.h: interface for the CFTPServer class. // ////////////////////////////////////////////////////////////////////// #if !defined(AFX_FTPSERVER_H__144E8B64_2004_4709_B55A_242FE5F07BD2__INCLUDED_) #define AFX_FTPSERVER_H__144E8B64_2004_4709_B55A_242FE5F07BD2__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #include "ConnectThread.h" #include "ListenSocket.h" #include "FTPEventSink.h" #include "UserManager.h" #include "SecurityManager.h" class CFTPServer : public CWnd { friend CConnectSocket; public: void SetGoodbyeMessage(LPCTSTR lpszText); void SetWelcomeMessage(LPCTSTR lpszText); void SetTimeout(int nValue); void SetPort(int nValue); void SetMaxUsers(int nValue); void SetStatisticsInterval(int nValue); BOOL IsActive(); void Stop(); BOOL Start(); CFTPServer(); virtual ~CFTPServer(); CUserManager m_UserManager; CSecurityManager m_SecurityManager; CCriticalSection m_CriticalSection; // list of thread pointers CTypedPtrList<CObList, CConnectThread*> m_ThreadList; int GetPort() { return m_nPort; }; int GetMaxUsers() { return m_nMaxUsers; } int GetTimeout() { return m_nTimeout; } int GetConnectionCount() { return m_nConnectionCount; } CString GetWelcomeMessage() { return m_strWelcomeMessage; }; CString GetGoodbyeMessage() { return m_strGoodbyeMessage; }; void AddTraceLine(int nType, LPCTSTR pstrFormat, ...); private: // socket member that listens for new connections CListenSocket m_ListenSocket; CFTPEventSink *m_pEventSink; int m_nPort; int m_nMaxUsers; CString m_strWelcomeMessage; CString m_strGoodbyeMessage; int m_nTimeout; BOOL m_bRunning; // statistics DWORD m_dwTotalReceivedBytes; DWORD m_dwTotalSentBytes; int m_nConnectionCount; int m_nTotalConnections; int m_nFilesDownloaded; int m_nFilesUploaded; int m_nFailedDownloads; int m_nFailedUploads; // Operations public: BOOL IsIPAddressAllowed(LPCTSTR lpszIPAddress); void SetSecurityMode(BOOL bBlockSpecific = TRUE); BOOL CheckMaxUsers(); void Initialize(CFTPEventSink *pEventSink); // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CFTPServer) //}}AFX_VIRTUAL // Generated message map functions protected: int m_nSecurityMode; int m_nStatisticsInterval; //{{AFX_MSG(CFTPServer) afx_msg void OnTimer(UINT nIDEvent); //}}AFX_MSG LRESULT OnThreadClose(WPARAM wParam, LPARAM lParam); LRESULT OnThreadStart(WPARAM wParam, LPARAM); LRESULT OnThreadMessage(WPARAM wParam, LPARAM lParam); DECLARE_MESSAGE_MAP() }; #endif // !defined(AFX_FTPSERVER_H__144E8B64_2004_4709_B55A_242FE5F07BD2__INCLUDED_)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值