65.9K
CodeProject 正在变化。 阅读更多。
Home

WTL 的 INET

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.86/5 (9投票s)

2005年8月12日

1分钟阅读

viewsIcon

59181

downloadIcon

986

为 WTL 开发者提供的互联网类。

引言

在本文中,我将介绍一些我编写的用于在 WTL 下使用 INET 的包装类。为了简化起见,代码使用 C++ 异常,因此无需检查每个函数调用的结果代码。

用法

所有句柄都继承自 CInternetHandle,因此无需手动销毁它们。

要开始使用 INET,首先需要创建一个会话。这可以通过创建一个 CInternetSession 对象来完成。您可以在构造函数中指定用户代理,或者将其留空(在这种情况下,代码将使用您的应用程序名称作为用户代理字符串)。

CInternetSession Session(_T("Test Application"));

连接

当前有两种类型的连接:HTTP 和 FTP。要创建连接,只需使用服务器参数构造一个对象即可。

CHttpConnection Connection1(Session,_T("https://codeproject.org.cn/"));
CFtpConnection Connection2(Session,_T("ftp://ftp.codeproject.com/"));

文件

所有互联网文件都继承自 CInternetFile。此外,还有三种特殊文件:HTTP/HTTPS 和 FTP。您可以通过已经创建的连接来创建文件对象,或者通过会话对象创建新的文件对象。

BYTE Buffer[4096];

CHttpFile File1(Connection1,_T("GET"),_T("/"));
File1.SendRequest();
for (DWORD dwRead1;dwRead1=File1.Read(Buffer,sizeof(Buffer)););

CHttpFile File2(Session,_T("https://codeproject.org.cn/"));
for (DWORD dwRead2;dwRead2=File2.Read(Buffer,sizeof(Buffer)););

在从文件读取时,还有一个特殊选项,允许您计时下载,以及将其限制为一定的下载速度。您可以使用 CInternetFile::CInfo 类来执行此操作。

BYTE Buffer[4096];
CHttpFile File3(Session,_T("https://codeproject.org.cn/"));
CInternetFile::CInfo Info(File3);
Info.SetRateLimit(10.5);
for (DWORD dwRead3;dwRead3=File3.Read(Buffer,sizeof(Buffer),Info);)
{
   // Info.GetTimeLeft() = Seconds left for download
}

异常

当发生错误时,代码会抛出异常 (CInternetException)。您可以使用 GetErrorMessage 函数获取错误消息。

try
{
  CInternetSession Session;
  CHttpFile File(Session,_T("https://codeproject.org.cn/"));
}
catch(CInternetException& err)
{
  MessageBox(err.GetErrorMessage());
}

错误与限制

我尝试实现一种回调机制,但它仍然存在一些问题。现在请避免使用它。此外,由于我没有真正需要 gopher,所以我从未将其放入我的代码中。如果您需要,欢迎您添加它。我正在我的项目中使用的代码,但它可能仍然包含一些错误。如果您发现任何问题,请通知我。

© . All rights reserved.