VC网络程序设计二则(转)

一、使用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;
}
原文地址:https://www.cnblogs.com/buffer/p/1280081.html