减小字体
增大字体
一、使用MFC编写FTP程序
1、生成CInternetSession变量。 CInternetSession ses; 2、打开FTP连接。 CFtpConnection* pFTP=ses.GetFtpConnection("ftp.microsoft.com","user","password",port,FALSE); 3、打开文件。 CInternetFile* pF=pFTP->OpenFile("abc.exe");
更简单的是使用 CFtpConnect::GetFile(...) ; CFtpConnection::PutFile(...) ;可以拷贝文件。 4、读取文件,由于CInternetFile是CStdFile的派生类,因此可以使用CFile,CStdFile的所有函数。 pF->Read(...)
高级用法: 1、查找文件,列文件目录。(FTP Tree Sample in VC5) CFTPFileFind类可以帮助你列出当前目录下的所有文件。用法和CFileFind相同。 2、断点续传。
当打开文件后,可以使用CInternetFile::Seek(...)重定位指针。但如果该服务器不支持断点续传会产生异常,应该有相应的捕捉代码。
其它: 同样的CHttpConnection的用法也很类似。
二 、在使用Internet后挂断线路 WinInet API提供的功能很强大,但是当关闭掉Internet事务却不能关闭掉dial up连接。在WinInet API中没有提供相应的函数完成该功能。那么如何才能在关闭掉Internet事务的同时关闭掉dial up连接呢? 解决方法:
RAS API可以通过调用RasHangUp(...)关闭连接,但是需要RAS句柄。有两种方法可以得当RAS句柄: 1、自己建立RAS连接是保存该句柄,但这样做对与解决当前提出的问题是没必要的, 2、通过RasEnumConnections(...)列举所有句柄。
所需环境: RASAPI32.DLL,该连接库在安装播号网络时会自动安装。 RAS.H RASAPI32.LIB
示范代码:
// Quit a dial up connection - rasapi32.lib und #include "ras.h" needed bool DisconnectRas() { bool bOk = false; RASCONN ras[20]; DWORD dSize,dNumber,dCount;
ras[0].dwSize = sizeof(RASCONN); dSize = sizeof( ras );
// Get active RAS - Connection if( RasEnumConnections( ras, &dSize, &dNumber ) == 0 ) { bOk = true;
for( dCount = 0; dCount < dNumber; dCount++ ) { // Hang up that connection if( RasHangUp(ras[dCount].hrasconn) != 0 ) { bOk = false; break; } } } return bOk; }
End of《VC网络程序设计二则》
|