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

相关文章

shell编程之函数与数组的使用详解

《shell编程之函数与数组的使用详解》:本文主要介绍shell编程之函数与数组的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录shell函数函数的用法俩个数求和系统资源监控并报警函数函数变量的作用范围函数的参数递归函数shell数组获取数组的长度读取某下的

揭秘Python Socket网络编程的7种硬核用法

《揭秘PythonSocket网络编程的7种硬核用法》Socket不仅能做聊天室,还能干一大堆硬核操作,这篇文章就带大家看看Python网络编程的7种超实用玩法,感兴趣的小伙伴可以跟随小编一起... 目录1.端口扫描器:探测开放端口2.简易 HTTP 服务器:10 秒搭个网页3.局域网游戏:多人联机对战4.

Java并发编程必备之Synchronized关键字深入解析

《Java并发编程必备之Synchronized关键字深入解析》本文我们深入探索了Java中的Synchronized关键字,包括其互斥性和可重入性的特性,文章详细介绍了Synchronized的三种... 目录一、前言二、Synchronized关键字2.1 Synchronized的特性1. 互斥2.

Python异步编程中asyncio.gather的并发控制详解

《Python异步编程中asyncio.gather的并发控制详解》在Python异步编程生态中,asyncio.gather是并发任务调度的核心工具,本文将通过实际场景和代码示例,展示如何结合信号量... 目录一、asyncio.gather的原始行为解析二、信号量控制法:给并发装上"节流阀"三、进阶控制

C#多线程编程中导致死锁的常见陷阱和避免方法

《C#多线程编程中导致死锁的常见陷阱和避免方法》在C#多线程编程中,死锁(Deadlock)是一种常见的、令人头疼的错误,死锁通常发生在多个线程试图获取多个资源的锁时,导致相互等待对方释放资源,最终形... 目录引言1. 什么是死锁?死锁的典型条件:2. 导致死锁的常见原因2.1 锁的顺序问题错误示例:不同

PyCharm接入DeepSeek实现AI编程的操作流程

《PyCharm接入DeepSeek实现AI编程的操作流程》DeepSeek是一家专注于人工智能技术研发的公司,致力于开发高性能、低成本的AI模型,接下来,我们把DeepSeek接入到PyCharm中... 目录引言效果演示创建API key在PyCharm中下载Continue插件配置Continue引言

C#反射编程之GetConstructor()方法解读

《C#反射编程之GetConstructor()方法解读》C#中Type类的GetConstructor()方法用于获取指定类型的构造函数,该方法有多个重载版本,可以根据不同的参数获取不同特性的构造函... 目录C# GetConstructor()方法有4个重载以GetConstructor(Type[]

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

【编程底层思考】垃圾收集机制,GC算法,垃圾收集器类型概述

Java的垃圾收集(Garbage Collection,GC)机制是Java语言的一大特色,它负责自动管理内存的回收,释放不再使用的对象所占用的内存。以下是对Java垃圾收集机制的详细介绍: 一、垃圾收集机制概述: 对象存活判断:垃圾收集器定期检查堆内存中的对象,判断哪些对象是“垃圾”,即不再被任何引用链直接或间接引用的对象。内存回收:将判断为垃圾的对象占用的内存进行回收,以便重新使用。