WinInet 编程:MFC 中的互联网编程

目录

概述

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 包含以下主要类:

  1. CInternetSession:表示一个互联网会话,用于初始化和管理互联网通信。
  2. CInternetConnection:表示一个互联网连接,用于连接到远程服务器。
  3. CInternetFile:表示一个互联网文件,用于读取或写入互联网文件。
  4. CHttpFile:表示一个 HTTP 文件,用于读取或写入 HTTP 文件。
  5. CGopherFile:表示一个 Gopher 文件,用于读取或写入 Gopher 文件。
  6. CFtpFile:表示一个 FTP 文件,用于读取或写入 FTP 文件。

使用 WinInet 编程的一般步骤

        使用 MFC WinInet 进行网络编程一般包括以下几个步骤:

  1. 创建 CInternetSession 类对象:初始化 WinInet 库并创建一个互联网会话对象。
  2. 查询设置:设置互联网选项,如代理服务器、超时时间等。
  3. 创建 CInternetConnection 类对象:连接到远程服务器。
  4. 创建 CInternetFile 类对象:打开互联网文件或 HTTP/FTP/Gopher 文件。
  5. 使用 CInternetFile 类对象:读取或写入互联网文件。
  6. 关闭 CInternetFile 类对象:关闭互联网文件。
  7. 关闭 CInternetConnection 类对象:断开与远程服务器的连接。
  8. 关闭 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 应用程序中,为程序员提供了强大的功能和框架。

  • 34
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值