{ m_pFtpConnection->Close(); delete m_pFtpConnection; } delete m_pInetSession; }
编译并且执行程序,如果连接出现问题,将会在一个消息框中报告出错消息。 发送文件到FTP文件服务器
---- 创建一个发送文件到FTP文件服务器的程序
建立单文档程序ftpfw, 在ftpfwview.h中加入包含 #include < afxinet.h >
在ftpfwview.h中添加如下的成员变量 public: bool m_bConnectionAttempted; int m_nFileStatus;
在ftpview.cpp中的ftpview构造函数中加入下面的代码 CFtpfwView::CFtpfwView() { m_bConnectionAttempted=false; }
使用ClassWizard加入新的类CFtpThread,该类派生于CWinThread 在ftpthread.h中加入如下变量 public: static UINT PutFile(LPVOID Status);
添加新类成员函数代码 UINT CFtpThread::PutFile(LPVOID Status) { int *pnFileStatus; CInternetSession *pInetSession; CFtpConnection *pFtpConnection=NULL; pnFileStatus=(int *)Status; *pnFileStatus=0; pInetSession=new CInternetSession(AfxGetAppName(),1, PRE_CONFIG_INTERNET_ACCESS); try { pFtpConnection=pInetSession-> GetFtpConnection("192.34.45.0"); } catch(CInternetException *pEx) { pEx->Delete(); pFtpConnection=NULL; *pnFileStatus=-1; goto BallOut; } *pnFileStatus =1; pFtpConnection->Remove("test.txt"); if(!pFtpConnection->PutFile ("test.txt","test.txt")) *pnFileStatus=-2; else *pnFileStatus=2; BallOut: if(pFtpConnection!=NULL) { pFtpConnection->Close(); delete pFtpConnection; } delete pInetSession; AfxEndThread(0); return false; }
编辑ftpfwview.cpp中的OnDraw()函数 void CFtpfwView::OnDraw(CDC* pDC) { CFtpfwDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if(!m_bConnectAttempted) { m_bConnectAttempted=TRUE; AfxBeginThread((AFX_THREADPROC) CFtpThread::PutFile,&m_nFileStatus); } }
编译并且执行程序,在连接和传输的过程中,应用程序仍然可以作自己的工作,这是因为传输的过程发生在线程中。 总结语 ---- 通过以上的程序我们可以明白FTP的工作原理,我们可以编制自己的获得FTP服务器的文件以及获得FTP服务器的根目录,亲自体验一下我们的程序工作的怎末样。
(编辑:aniston)
|