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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/839610.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

文件中海量数据的排序

文件中海量数据的排序 题目&#xff1a; 跟之前堆排序可以解决TopK问题一样&#xff0c;我们来看看归并排序会用来解决什么问题&#xff1f; 思路&#xff1a; 我们说归并排序是外排序。其实就是将数据分成一个个小段&#xff0c;在内存中进行排序&#xff0c;再拿出内存&am…

【Linux】深入理解 Linux 的 find 指令

我一直都在流浪 可我不曾见过海洋 我以为的遗忘 原来躺在你手上 我努力微笑坚强 寂寞筑成一道围墙 也敌不过夜里 最温柔的月光 &#x1f3b5; 林宥嘉《残酷月光》 find 是 Linux 系统中功能非常强大的文件搜索工具。它可以递归地在指定目录中查找文件和目…

【Linux001】centos常用命令总结总结(已更新)

1.熟悉、梳理、总结下centos知识体系。 2.Linux相关知识&#xff0c;在日常开发中必不可少&#xff0c;如一些必知必会的常用命令&#xff0c;如环境搭建、应用部署等。同时&#xff0c;也要谨慎使用一些命令&#xff0c;如rm -rf&#xff0c;防止一些生产事故的发生。 3.欢迎点…

Mysql8.0离线安装 centos

Mysql8.0离线安装 centos 上传mysql安装包并解压 tar xvf mysql-8.0.37-1.el7.x86_64.rpm-bundle.tar运行安装对应的rpm包&#xff0c;按照一下顺序 rpm -ivh mysql-community-common-8.0.37-1.el7.x86_64.rpm rpm -ivh mysql-community-client-plugins-8.0.37-1.el7.x86_64.rp…

预约直播丨ETLCloud训练营:ETL中多流数据合并与运算专题

在大数据处理领域&#xff0c;一个至关重要的步骤是对多源数据流进行汇聚与融合&#xff0c;进而开展深度处理与剖析。此操作对于构建高效数据仓库、实现数据动态变化的实时洞察&#xff0c;以及驾驭复杂事件流的处理机制尤为关键。过程涉及从多样化的数据源中抽取信息&#xf…

顺序表详解(Java)

目录 顺序表 初始化 方法实现 1> display 遍历(简单) 2> isFull 是否为满 3> size 顺序表的大小 4> add 增加在最后位置(考虑是否满了) (难) 5> add 增加到指定位置(是否为满) 6> isEmpty 是否为空 7> contain 是否包含某个元素 (简单) 8> …

Spring Boot 3.x使用knife4j

Spring Boot 3.x使用knife4j 1.添加knife4j依赖 <dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId><version>4.4.0</version> </dependency>2.在…

【Unity Shader入门精要 第9章】更复杂的光照(四)

1. 透明度测试物体的阴影 对于物体有片元丢弃的情况&#xff0c;比如透明度测试或者后边会讲到的消融效果&#xff0c;使用默认的 ShadowCaster Pass 会产生问题&#xff0c;这是因为该Pass在生成阴影映射纹理时&#xff0c;没有考虑被丢弃的片元&#xff0c;而是使用完整的模…

建投数据收获客户感谢信

建投数据自2021年提出“以数据为核心的智能科技服务商”&#xff0c;并一直在为“成为国内领先的数字化转型合作伙伴”而努力&#xff0c;在赋能行业客户创造更大价值的同时&#xff0c;也陆续收到来自客户的肯定。 建投数据始终践行“成就客户&#xff0c;创新为要&#xff0…

【网络协议】【OSI】一次HTTP请求OSI工作过程详细解析

目录 1. 一次HTTP请求OSI工作过程 1.1 应用层&#xff08;第7层&#xff09; 1.2 表示层&#xff08;第6层&#xff09; 1.3 会话层&#xff08;第5层&#xff09; 1.4 传输层&#xff08;第4层&#xff09; 1.5 网络层&#xff08;第3层&#xff09; 1.6 数据链路层&am…

移除链表元素-力扣

一道基础的链表相关题目&#xff0c;在删除时对头节点进行单独处理。 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* …

【vue部署】Apache部署vue项目

Apache部署vue项目 Apache 下载安装(windows)1. 下载2. 安装3. 启动服务 vue 部署配置1. 基础配置2. 解决页面刷新问题 Apache 下载安装(windows) 1. 下载 Apache 2.4.59 下载地址&#xff1a;httpd-2.4.59-240404-win64-VS17.zip Visual C Redistributable for Visual Studi…

Go语言通过goroutine实现多协程文件上传

文章推荐 1 作为程序员&#xff0c;开发用过最好用的AI工具有哪些&#xff1f; 2 Github Copilot正版的激活成功&#xff0c;终于可以chat了 3 idea,pycharm等的ai assistant已成功激活 4 新手如何拿捏 Github Copilot AI助手&#xff0c;帮助你提高写代码效率 5 Jetbrains的a…

AWS EC2 连接 AWS RDS(Mysql)

1 创建RDS数据库 点击创建数据库 引擎选项 模板 设置 连接 2 EC2连接Mysql $ sudo yum list mariadb* Installed Packages mariadb-connector-c.x86_64 3.1.13-1.amzn2023.0.3 amazonl…

swig4.2.1压缩包中里面没有找到swig.exe

官网&#xff1a;Simplified Wrapper and Interface Generator C转 C# 采用Swig.exe 打开Example示例的解决方案&#xff1a;sln 生成 即可查看如何调用和使用.i文件 但是&#xff1a;迅雷不管下载哪个版本都是没有exe 官网说了自带。很迷很迷~ 下载其他版本的时候发现&…

TikTok矩阵管理系统:品牌增长的新引擎

随着社交媒体的快速发展&#xff0c;TikTok已成为全球最受欢迎的短视频平台之一。品牌和企业纷纷涌入这个平台&#xff0c;寻求新的增长机会。然而&#xff0c;随着内容的激增和用户群体的多样化&#xff0c;管理TikTok账号变得越来越复杂。这时&#xff0c;TikTok矩阵管理系统…

使用第三方的PyCharm开发工具

目录 PyCharm下载 PyCharm安装 运行PyCharm 创建工程目录 编写“hello world”程序 在同一个工程下创建多个程序文件 运行程序的多种方法 保存程序 关闭程序或工程 删除程序 打开最近的工程 调试断点 熟悉PyCharm开发环境 设置Python解析器 输出彩色控制台文字及…

50道题目!Python、SQL数据库、AB测试、业务分析、机器学习都在这里了!

介绍 每日一题系列已经更新了50道题目啦&#xff01; 题目难度为初级到中级&#xff0c;涵盖了Python、SQL数据库、AB测试、业务分析、机器学习五大主题&#xff0c;适合初学者和有一定基础的朋友。 原文链接: 50道题目&#xff01;Python、SQL数据库、AB测试、业务分析、机器…

pycharm 关闭项目卡死

PyCharm2023.3.4 关闭一直卡在 closing projects 解决办法&#xff1a; 打开PyCharm&#xff0c; 选择 Help -> Find Action -> 输入 Registry -> 禁用ide.await.scope.completion

10G SFP双口万兆以太网控制器,高速光口网络接口卡

2-Port 10G SFP NIC 是一款高速网 络接口卡&#xff0c;采用了 PCI Express 3.0 x8 接口&#xff0c;支持双 端口万兆以太网&#xff0c;具有高性能、高可靠性、低功耗等 优点&#xff0c;是数据中心、云计算、虚拟化等领域的理想选 择。 支持多种网络协议&#xff0c;如 …