一、使用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;
}