目录
概述
WinInet 是一套 Windows API(应用程序编程接口),用于实现互联网应用程序的网络通信和数据传输。WinInet 抽象了底层网络协议和硬件细节,为程序员提供了一套统一的接口,简化了互联网应用程序的开发过程。WinInet 广泛应用于各种 Windows 应用程序中,包括网页浏览器、下载管理器、网络游戏等。
MFC WinInet 所包含的类
MFC(Microsoft Foundation Class)是 Microsoft 公司提供的一套 C++ 类库,用于在 Windows 平台上开发桌面应用程序。MFC WinInet 则是 MFC 框架中用于网络编程的一套类,它封装了 WinInet API,为程序员提供了一套面向对象的接口来实现互联网通信和数据传输。
MFC WinInet 包含以下主要类:
CInternetSession
:表示一个互联网会话,用于初始化和管理互联网通信。CInternetConnection
:表示一个互联网连接,用于连接到远程服务器。CInternetFile
:表示一个互联网文件,用于读取或写入互联网文件。CHttpFile
:表示一个 HTTP 文件,用于读取或写入 HTTP 文件。CGopherFile
:表示一个 Gopher 文件,用于读取或写入 Gopher 文件。CFtpFile
:表示一个 FTP 文件,用于读取或写入 FTP 文件。
使用 WinInet 编程的一般步骤
使用 MFC WinInet 进行网络编程一般包括以下几个步骤:
- 创建 CInternetSession 类对象:初始化 WinInet 库并创建一个互联网会话对象。
- 查询设置:设置互联网选项,如代理服务器、超时时间等。
- 创建 CInternetConnection 类对象:连接到远程服务器。
- 创建 CInternetFile 类对象:打开互联网文件或 HTTP/FTP/Gopher 文件。
- 使用 CInternetFile 类对象:读取或写入互联网文件。
- 关闭 CInternetFile 类对象:关闭互联网文件。
- 关闭 CInternetConnection 类对象:断开与远程服务器的连接。
- 关闭 CInternetSession 类对象:结束互联网会话。
创建 CInternetSession 类对象
在使用 MFC WinInet 进行网络编程时,第一步是创建一个 CInternetSession
类对象。这个对象表示一个互联网会话,用于初始化和管理互联网通信。
头文件包含
在代码中包含 MFC WinInet 的头文件:#include <afxwininet.h>
。
对象创建
使用 CInternetSession
类的构造函数创建一个对象:
CInternetSession session;
初始化 WinInet
使用 CInternetSession
类的 Open
函数初始化 WinInet:
BOOL bSuccess = session.Open(
proxyName, // 代理服务器名称
proxyBypass, // 代理服务器绕过列表
flags, // 选项标志
NULL // 保留的参数
);
查询设置 Internet 请求对象
在创建 CInternetSession
类对象后,可以设置互联网选项,如代理服务器、超时时间等。
设置代理服务器
使用 CInternetSession
类的 SetProxy()
函数设置代理服务器:
session.SetProxy(
proxyServer, // 代理服务器名称
proxyBypass // 代理服务器绕过列表
);
设置超时时间
使用 CInternetSession
类的 SetSessionOption()
函数设置超时时间:
DWORD dwOption = INTERNET_OPTION_RECEIVE_TIMEOUT;
DWORD dwValue = 30000; // 30 秒超时时间
session.SetSessionOption(dwOption, &dwValue, sizeof(dwValue));
创建 CInternetConnection 类对象
在设置好互联网选项后,下一步是创建一个 CInternetConnection
类对象,用于连接到远程服务器。
对象创建
使用 CInternetConnection
类的构造函数创建一个对象:
CInternetConnection connection(&session);
连接到服务器
使用 CInternetConnection
类的 Connect()
函数连接到远程服务器:
BOOL bSuccess = connection.Connect(
serverName, // 服务器名称
serverPort, // 服务器端口
NULL, // 用户名
NULL, // 密码
NULL, // 选项标志
NULL // 保留的参数
);
创建 CInternetFile 类对象
在连接到远程服务器后,下一步是创建一个 CInternetFile
类对象,用于打开和操作互联网文件。
对象创建
使用 CInternetFile
类的构造函数创建一个对象:
CInternetFile file(&connection);
打开互联网文件
使用 CInternetFile
类的 Open()
函数打开互联网文件:
BOOL bSuccess = file.Open(
fileName, // 文件名称
flags, // 选项标志
NULL, // 访问模式
NULL, // 代理绕过列表
NULL // 保留的参数
);
使用 CInternetFile 类对象
在打开互联网文件后,可以使用 CInternetFile
类对象来读取或写入文件。
读取文件
使用 CInternetFile
类的 Read()
函数读取文件:
BYTE buffer[1024];
DWORD dwRead;
BOOL bSuccess = file.Read(buffer, sizeof(buffer), &dwRead);
写入文件
使用 CInternetFile
类的 Write()
函数写入文件:
BYTE buffer[] = "Hello, World!";
DWORD dwWritten;
BOOL bSuccess = file.Write(buffer, sizeof(buffer), &dwWritten);
关闭 CInternetFile 类对象
在使用完互联网文件后,需要关闭文件并释放资源。
关闭文件
使用 CInternetFile
类的 Close()
函数关闭文件:
file.Close();
释放资源
使用 CInternetFile
类的析构函数释放资源:
file.~CInternetFile();
创建并使用 CInternetQueryInfo 类对象
CInternetQueryInfo
类用于查询互联网信息,如 HTTP 头信息、FTP 目录列表等。
对象创建
使用 CInternetQueryInfo
类的构造函数创建一个对象:
CInternetQueryInfo query(&connection);
查询互联网信息
使用 CInternetQueryInfo
类的 QueryInfo()
函数查询互联网信息:
BOOL bSuccess = query.QueryInfo(
fileName, // 文件名称
flags, // 选项标志
NULL, // 代理绕过列表
NULL // 保留的参数
);
访问查询结果
使用 CInternetQueryInfo
类的 GetResult()
函数访问查询结果:
DWORD dwResult = query.GetResult();
重载 OnStatusCallback() 函数
在使用 MFC WinInet 进行网络编程时,可能会遇到各种网络错误或事件,如连接失败、超时等。为了处理这些错误或事件,可以重载 OnStatusCallback()
函数。
函数重载
在主对话框类中重载 OnStatusCallback()
函数:
afx_msg LRESULT CMainDlg::OnStatusCallback(
WPARAM wParam, // 状态代码
LPARAM lParam // 状态信息
);
处理网络错误或事件
在 OnStatusCallback()
函数中处理网络错误或事件:
switch (wParam) {
case INTERNET_STATUS_RESOLVING_NAME:
// 正在解析域名
break;
case INTERNET_STATUS_NAME_RESOLVED:
// 域名解析成功
break;
case INTERNET_STATUS_CONNECTING_TO_SERVER:
// 正在连接到服务器
break;
// ... 其他错误或事件代码 ...
default:
break;
}
创建并使用 CInternetFile 类对象
除了使用 CInternetFile
类对象读取或写入互联网文件外,还可以创建并使用 CInternetFile
类对象来操作 FTP 目录或 HTTP 头信息。
对象创建
使用 CInternetFile
类的构造函数创建一个对象:
CInternetFile file(&connection);
打开 FTP 目录或 HTTP 头信息
使用 CInternetFile
类的 Open()
函数打开 FTP 目录或 HTTP 头信息:
BOOL bSuccess = file.Open(
fileName, // 文件名称
flags, // 选项标志
NULL, // 访问模式
NULL, // 代理绕过列表
NULL // 保留的参数
);
读取 FTP 目录或 HTTP 头信息
使用 CInternetFile
类的 Read()
函数读取 FTP 目录或 HTTP 头信息:
BYTE buffer[1024];
DWORD dwRead;
BOOL bSuccess = file.Read(buffer, sizeof(buffer), &dwRead);
总结
MFC WinInet 是一套强大的类库,为 MFC 程序员提供了在 Windows 平台上实现互联网通信和数据传输的工具。通过使用 MFC WinInet,程序员可以更容易地创建互联网应用程序,简化了网络编程的过程。MFC WinInet 广泛应用于各种 Windows 应用程序中,为程序员提供了强大的功能和框架。