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

2024-05-24 13:12
文章标签 编程 mfc 互联网 wininet

本文主要是介绍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 应用程序中,为程序员提供了强大的功能和框架。

这篇关于WinInet 编程:MFC 中的互联网编程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/998502

相关文章

Python中Tkinter GUI编程详细教程

《Python中TkinterGUI编程详细教程》Tkinter作为Python编程语言中构建GUI的一个重要组件,其教程对于任何希望将Python应用到实际编程中的开发者来说都是宝贵的资源,这篇文... 目录前言1. Tkinter 简介2. 第一个 Tkinter 程序3. 窗口和基础组件3.1 创建窗

Java AOP面向切面编程的概念和实现方式

《JavaAOP面向切面编程的概念和实现方式》AOP是面向切面编程,通过动态代理将横切关注点(如日志、事务)与核心业务逻辑分离,提升代码复用性和可维护性,本文给大家介绍JavaAOP面向切面编程的概... 目录一、AOP 是什么?二、AOP 的核心概念与实现方式核心概念实现方式三、Spring AOP 的关

MySQL的JDBC编程详解

《MySQL的JDBC编程详解》:本文主要介绍MySQL的JDBC编程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、前置知识1. 引入依赖2. 认识 url二、JDBC 操作流程1. JDBC 的写操作2. JDBC 的读操作总结前言本文介绍了mysq

Python异步编程之await与asyncio基本用法详解

《Python异步编程之await与asyncio基本用法详解》在Python中,await和asyncio是异步编程的核心工具,用于高效处理I/O密集型任务(如网络请求、文件读写、数据库操作等),接... 目录一、核心概念二、使用场景三、基本用法1. 定义协程2. 运行协程3. 并发执行多个任务四、关键

AOP编程的基本概念与idea编辑器的配合体验过程

《AOP编程的基本概念与idea编辑器的配合体验过程》文章简要介绍了AOP基础概念,包括Before/Around通知、PointCut切入点、Advice通知体、JoinPoint连接点等,说明它们... 目录BeforeAroundAdvise — 通知PointCut — 切入点Acpect — 切面

C#异步编程ConfigureAwait的使用小结

《C#异步编程ConfigureAwait的使用小结》本文介绍了异步编程在GUI和服务器端应用的优势,详细的介绍了async和await的关键作用,通过实例解析了在UI线程正确使用await.Conf... 异步编程是并发的一种形式,它有两大好处:对于面向终端用户的GUI程序,提高了响应能力对于服务器端应

C# async await 异步编程实现机制详解

《C#asyncawait异步编程实现机制详解》async/await是C#5.0引入的语法糖,它基于**状态机(StateMachine)**模式实现,将异步方法转换为编译器生成的状态机类,本... 目录一、async/await 异步编程实现机制1.1 核心概念1.2 编译器转换过程1.3 关键组件解析

Go语言数据库编程GORM 的基本使用详解

《Go语言数据库编程GORM的基本使用详解》GORM是Go语言流行的ORM框架,封装database/sql,支持自动迁移、关联、事务等,提供CRUD、条件查询、钩子函数、日志等功能,简化数据库操作... 目录一、安装与初始化1. 安装 GORM 及数据库驱动2. 建立数据库连接二、定义模型结构体三、自动迁

Python 异步编程 asyncio简介及基本用法

《Python异步编程asyncio简介及基本用法》asyncio是Python的一个库,用于编写并发代码,使用协程、任务和Futures来处理I/O密集型和高延迟操作,本文给大家介绍Python... 目录1、asyncio是什么IO密集型任务特征2、怎么用1、基本用法2、关键字 async1、async

Java并发编程之如何优雅关闭钩子Shutdown Hook

《Java并发编程之如何优雅关闭钩子ShutdownHook》这篇文章主要为大家详细介绍了Java如何实现优雅关闭钩子ShutdownHook,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起... 目录关闭钩子简介关闭钩子应用场景数据库连接实战演示使用关闭钩子的注意事项开源框架中的关闭钩子机制1.