MFC库参考 - WinInet基础知识

2024-03-27 13:18

本文主要是介绍MFC库参考 - WinInet基础知识,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

      MFC库参考 -  WinInet基础知识  您可以使用WinInet添加FTP支持,从您的应用程序中下载和上传文件。您可以覆盖OnStatusCallback,并在搜索和下载文件时使用dwContext参数向用户提供进度信息。本文包含以下主题: 创建一个非常简单的浏览器下载网页FTP文件检索Gopher目录在传输文件时显示进度信息下面的代码摘录演示如何创建一个简单的浏览器,下载一个网页,FTP一个文件,并搜索一个gopher文件。它们不是完整的示例,并不是全部包含异常处理。有关WinInet的其他信息,请参阅Win32 Internet Extensions(WinInet)。创建一个非常简单的浏览器


Create a Very Simple BrowserCopy Code 
#include <afxinet.h>
//assumes URL names have been initialized
CInternetSession session("My Session");
CStdioFile* pFile = NULL;
//use a URL and display a Web page
while (lpszURL = DisplayPage(...))
{pFile = session.OpenURL(lpszURL);while (pFile->Read(szBuff,1024) > 0){//read file...}delete pFile;
}
session.Close();Download a Web PageCopy Code 
//this code excerpt also demonstrates try/catch exception handling
#include <afxinet.h>
//assumes server, port, and URL names have been initialized
CInternetSession session("My Session");
CHttpConnection* pServer = NULL;
CHttpFile* pFile = NULL;
try
{CString strServerName;INTERNET_PORT nPort;pServer = session.GetHttpConnection(strServerName, nPort);pFile = pServer->OpenRequest(CHttpConnection::HTTP_VERB_GET, strObject);pFile->AddRequestHeaders(szHeaders);pFile->SendRequest();pFile->QueryInfoStatusCode(dwRet);if (dwRet == HTTP_STATUS_OK){UINT nRead = pFile->Read(szBuff, 1023);while (nRead > 0){//read file...}}delete pFile;delete pServer;
}
catch (CInternetException* pEx)
{//catch errors from WinInet
}
session.Close();FTP a FileCopy Code 
#include <afxinet.h>
//assumes server and file names have been initialized
CInternetSession session("My FTP Session");
CFtpConnection* pConn = NULL;pConn = session.GetFtpConnection(lpszServerName);
//get the file
if (!pConn->GetFile(pstrRemoteFile, pstrLocalFile))//display an error
delete pConn;
session.Close();Retrieve a Gopher DirectoryCopy Code 
#include <afxinet.h>
//assumes file name has been initialized
CInternetSession session("My Gopher Session");
CGopherConnection* pConn = NULL;
CGopherFileFind* pFile;pConn = session.GetGopherConnection("gopher.yoursite.com");
pFile = new CGopherFileFind(pConn);
BOOL bFound = pFile->FindFile(lpszFileToFind);
while (bFound)
{bFound = pFile->FindNextFile();//retrieve attributes of found file
}
delete pFile;
delete pConn;
session.Close();



使用OnStatusCallback
使用WinInet类时,可以使用应用程序的CInternetSession对象的OnStatusCallback成员来检索状态信息。如果您导出自己的CInternetSession对象,覆盖OnStatusCallback,并启用状态回调,MFC将使用该Internet会话中所有活动的进度信息调用OnStatusCallback函数。因为单个会话可能支持多个连接(在其一生中可能执行许多不同的不同操作),OnStatusCallback需要一种机制来识别具有特定连接或事务的每个状态更改。该机制由提供给WinInet支持类中许多成员函数的上下文ID参数提供。此参数始终为DWORD类型,始终命名为dwContext。分配给特定Internet对象的上下文仅用于标识对象在CInternetSession对象的OnStatusCallback成员中导致的活动。对OnStatusCallback的调用接收到几个参数; 这些参数一起工作,告诉您的应用程序,哪些事务和连接已经取得了哪些进展。

创建CInternetSession对象时,可以为构造函数指定一个dwContext参数。CInternetSession本身不使用上下文ID; 相反,它将上下文ID传递给任何未明确获取自己的上下文ID的InternetConnection派生对象。反过来,如果没有明确指定不同的上下文ID,那么CInternetConnection对象将会将上下文ID传递给他们创建的CInternetFile对象。另一方面,如果您指定自己的特定上下文ID,则该对象及其所做的任何工作将与该上下文ID相关联。您可以使用上下文ID来标识在OnStatusCallback函数中给您的状态信息。在传输文件时显示进度信息
例如,如果您编写一个与FTP服务器建立连接以读取文件并连接到HTTP服务器以获取网页的应用程序,那么您将拥有一个CInternetSession对象,两个CInternetConnection对象(一个是CFtpSession另一个将是一个CHttpSession)和两个CInternetFile对象(每个连接一个)。如果您使用dwContext参数的默认值,则无法区分表示FTP连接进度的OnStatusCallback调用以及指示HTTP连接进度的调用。如果您指定了一个dwContext ID,您可以稍后在OnStatusCallback中进行测试,您将知道哪个操作生成回调。也可以看看
概念
MFC互联网编程基础
Win32 Internet Extensions(WinInet)要提出建议或报告有关帮助或本产品的其他功能的错误,请访问反馈网站。 


这篇关于MFC库参考 - WinInet基础知识的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

linux-基础知识3

打包和压缩 zip 安装zip软件包 yum -y install zip unzip 压缩打包命令: zip -q -r -d -u 压缩包文件名 目录和文件名列表 -q:不显示命令执行过程-r:递归处理,打包各级子目录和文件-u:把文件增加/替换到压缩包中-d:从压缩包中删除指定的文件 解压:unzip 压缩包名 打包文件 把压缩包从服务器下载到本地 把压缩包上传到服务器(zip

计组基础知识

操作系统的特征 并发共享虚拟异步 操作系统的功能 1、资源分配,资源回收硬件资源 CPU、内存、硬盘、I/O设备。2、为应⽤程序提供服务操作系统将硬件资源的操作封装起来,提供相对统⼀的接⼝(系统调⽤)供开发者调⽤。3、管理应⽤程序即控制进程的⽣命周期:进程开始时的环境配置和资源分配、进程结束后的资源回收、进程调度等。4、操作系统内核的功能(1)进程调度能⼒: 管理进程、线

go基础知识归纳总结

无缓冲的 channel 和有缓冲的 channel 的区别? 在 Go 语言中,channel 是用来在 goroutines 之间传递数据的主要机制。它们有两种类型:无缓冲的 channel 和有缓冲的 channel。 无缓冲的 channel 行为:无缓冲的 channel 是一种同步的通信方式,发送和接收必须同时发生。如果一个 goroutine 试图通过无缓冲 channel

java常用面试题-基础知识分享

什么是Java? Java是一种高级编程语言,旨在提供跨平台的解决方案。它是一种面向对象的语言,具有简单、结构化、可移植、可靠、安全等特点。 Java的主要特点是什么? Java的主要特点包括: 简单性:Java的语法相对简单,易于学习和使用。面向对象:Java是一种完全面向对象的语言,支持封装、继承和多态。跨平台性:Java的程序可以在不同的操作系统上运行,称为"Write once,

基于SpringBoot的宠物服务系统+uniapp小程序+LW参考示例

系列文章目录 1.基于SSM的洗衣房管理系统+原生微信小程序+LW参考示例 2.基于SpringBoot的宠物摄影网站管理系统+LW参考示例 3.基于SpringBoot+Vue的企业人事管理系统+LW参考示例 4.基于SSM的高校实验室管理系统+LW参考示例 5.基于SpringBoot的二手数码回收系统+原生微信小程序+LW参考示例 6.基于SSM的民宿预订管理系统+LW参考示例 7.基于

MFC中Spin Control控件使用,同时数据在Edit Control中显示

实现mfc spin control 上下滚动,只需捕捉spin control 的 UDN_DELTAPOD 消息,如下:  OnDeltaposSpin1(NMHDR *pNMHDR, LRESULT *pResult) {  LPNMUPDOWN pNMUpDown = reinterpret_cast(pNMHDR);  // TODO: 在此添加控件通知处理程序代码    if

控制台和MFC中内存泄露工具vld的使用

最近想检测下项目中内存泄露的情况,选中了vld这款。在查找使用方法的时候,大都是控制台下的示例,添加到main函数所在的源文件上。换成MFC就纠结了,不知道添加到哪里去。本文记录控制台和MFC中的使用vld过程。    vld资源:    1)、大家可以移步下边的网址下载:     http://vld.codeplex.com/releases/view/82311    2

关于回调函数和钩子函数基础知识的整理

回调函数:Callback Function 什么是回调函数? 首先做一个形象的比喻:   你有一个任务,但是有一部分你不会做,或者说不愿做,所以我来帮你做这部分,你做你其它的任务工作或者等着我的消息,但是当我完成的时候我要通知你我做好了,你可以用了,我怎么通知你呢?你给我一部手机,让我做完后给你打电话,我就打给你了,你拿到我的成果加到你的工作中,继续完成其它的工作.这就叫回叫,手机

MFC中App,Doc,MainFrame,View各指针的互相获取

纸上得来终觉浅,为了熟悉获取方法,我建了个SDI。 首先说明这四个类的执行顺序是App->Doc->Main->View 另外添加CDialog类获得各个指针的方法。 多文档的获取有点小区别,有时间也总结一下。 //  App void CSDIApp::OnApp() {      //  App      //  Doc     CDocument *pD

PNG透明背景按钮的实现(MFC)

问题描述: 当前要在对话框上添加一个以两个PNG图片作为背景的按钮,PNG图的背景是透明的,按钮也要做出相同的透明效果。并且鼠标不在按钮上时,按钮显示"bg1.png";鼠标移动到按钮上时,按钮显示"bg2.png" 开发环境为VS2010。 解决办法: 使用GDI+库装载PNG图片,并使用MFC Button Control和CMFCButton类结合,调用CMFCButton