• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > 三种获取网页源码的方法(使用MFC/Socket实现)

三种获取网页源码的方法(使用MFC/Socket实现)

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了mfc socket,mfc socket编程实例,mfc socket网络编程,mfc socket通信实例,mfc socket编程等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

第一个方法是使用MFC里面的

<afxinet.h>

要讲一下,pHttpFile->ReadString() 每次可能只读一个数据片断,读多少次取决于网络状况,所以要把每次读到的数据加到总数据的尾部,用了CString 省去了缓冲区处理:)
别忘了包含头文件#include <afxinet.h> 在工程设置,里面要选择 using MFC 要不然编译不了

第二种是使用WinNet的纯API实现的

#pragma comment(lib, "wininet.lib")

void GetWebSrcCode(const char *Url);

int _tmain(int argc, _TCHAR* argv[])
{
    GetWebSrcCode("http://www.weikejianghu.com/");

    return 0;
}

void GetWebSrcCode(const char *Url)
{
    HINTERNET hSession = InternetOpen("zwt", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
    if (hSession != NULL)
    {
        HINTERNET hURL = InternetOpenUrl(hSession, Url, NULL, 0, INTERNET_FLAG_DONT_CACHE, 0);
        if (hURL != NULL)
        {
            char Temp[MAXBLOCKSIZE] = {0};
            ULONG Number = 1;

            FILE *stream;
            if( (stream = fopen( "E:\\test.html", "wb" )) != NULL )
            {
                while (Number > 0)
                {
                    InternetReadFile(hURL, Temp, MAXBLOCKSIZE - 1, &Number);
                    fwrite(Temp, sizeof (char), Number , stream);
                }
                fclose( stream );
            }

            InternetCloseHandle(hURL);
            hURL = NULL;
        }

        InternetCloseHandle(hSession);
        hSession = NULL;
    }
}
</div>

第三种就是使用非封装过的Socket实现了


    // 初始化套接字 
    if(WSAStartup(MAKEWORD(2,2),&wsadata))
        printf("初始化SOCKET出错!");
    lphostent=gethostbyname(host_name);  
    if(lphostent==NULL)  
        printf("lphostent为空!");  
    hsocket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);  
    saServer.sin_family = AF_INET;  
    saServer.sin_port = htons(80);  
    saServer.sin_addr =*((LPIN_ADDR)*lphostent->h_addr_list);  
    // 利用SOCKET连接  
    nRet = connect(hsocket,(LPSOCKADDR)&saServer,sizeof(SOCKADDR_IN));  
    if(nRet == SOCKET_ERROR)  
    {
        printf("建立连接时出错!");  
        closesocket(hsocket);
        return 0;
    }
    // 利用SOCKET发送  

    nRet = send(hsocket,req,strlen(req),0);  
    if(nRet==SOCKET_ERROR)  
    {  
        printf("发送数据包时出错!");  
        closesocket(hsocket);  
    }  
    nRet=1;  
    while(nRet>0)  
    {  
        // 接收返回数据包  
        nRet=recv(hsocket,(LPSTR)Dest,sizeof(Dest),0);  
        if(nRet>0)
            Dest[nRet]=0;
        else  
            Dest[0]=0; 
        char sDest[3000] = {0};
        UTF8_2_GB2312(sDest,nRet,Dest,nRet);
        // 显示返回数据包的大小、内容 
        //printf("\nReceived bytes:%d\n",nRet);  
        printf("Result:\n%s",sDest);  
    }
}
</div>

另外,以上我们获取网页的时候,获取到的可能是UTF8,似乎目前大多数网站都用的这种编码吧!下面是编码转换。

代码如下:</div>

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 三种获取网页源码的方法(使用MFC/Socket实现)

相关文章

  • 2018-08-06string函数功能实现
  • 2022-04-30C语言指针是什么?1分钟彻底理解C语言指针的概念
  • 2017-05-28C++ explicit构造函数实例解析
  • 2017-05-28C++里最容易忽视却不能忽视的问题(必看)
  • 2017-05-28贪吃蛇游戏C++命令行版实例代码
  • 2017-05-28用C语言的泛型实现交换两个变量值
  • 2017-05-28简介C++编程中的运算符重载
  • 2017-05-28使用c语言生成随机数的示例分享
  • 2017-05-28C++事件处理中__event与__raise关键字的用法讲解
  • 2017-05-28libevent库的使用方法实例

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C++ 先对数组排序,在进行折半查找
    • C++普通函数指针与成员函数指针实例解析
    • C++中对象的常引用总结
    • c++中do{...}while(0)的意义和用法
    • do...while(0)的妙用详细解析
    • 浅谈返回函数内部new分配的内存的引用
    • C++画正弦线实例代码
    • C语言时间处理实例分享
    • 解析在main函数之前调用函数以及对设计的作用详解
    • 基于C语言实现的扫雷游戏代码

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有