目录
概述
MFC WinInet 所包含的类
使用 WinInet 编程的一般步骤
创建 CInternetSession 类对象
头文件包含
对象创建
初始化 WinInet
查询设置 Internet 请求对象
设置代理服务器
设置超时时间
创建 CInternetConnection 类对象
对象创建
连接到服务器
创建 CInternetFile 类对象
对象创建
打开互联网文件
使用 CInternetFile 类对象
读取文件
写入文件
关闭 CInternetFile 类对象
关闭文件
释放资源
创建并使用 CInternetQueryInfo 类对象
对象创建
查询互联网信息
访问查询结果
重载 OnStatusCallback() 函数
函数重载
处理网络错误或事件
创建并使用 CInternetFile 类对象
对象创建
打开 FTP 目录或 HTTP 头信息
读取 FTP 目录或 HTTP 头信息
总结
概述
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 应用程序中,为程序员提供了强大的功能和框架。