用VC++和Winsock实现与HTTP服务器通话

VS2019利用Curl库实现HTTP网络通信(C++) VS2019利用Curl库实现HTTP网络通信(C++); 阅读详情

用VC++和Winsock实现与HTTP服务器通话


2003-04-10 Ji Hong 
 
一、引 言
    Windows Socket API是一套开放的、支持多种协议的Windows下的网络编程接口,它包 括一个标准的 BerkeleySocket功能调用的集合,以及为Windows所作的重要扩充。 Windows Socket经过不断完善并在众 多公司的全力支持下,已成为Windows网络编程的事实上的标准。
    本 文 将 在VC++ 5.0 环 境 下 介 绍 一个基于 Winsock 的 HTTP 客户应用程序。 读者可以基于本例 同样的原理实现其他Internet常用协议(time,SMTP, POP3, Telnet, FTP 等)的客户应用程序。
        
二、一个简单的浏览器
    我将创建一个简单的浏览器,以说明如何通过Winsock基于HTTP协议实现HTTP 客户应 用程序。
    首先我将创建一个帮助函数 LogFile(),该函数把传递给它的字符串写到磁盘文件 中。然后再创建 本示例的核心函数 -- HttpClient()。在这个核心函数中,我将通 过 Winsock 连接到 HTTP 服务器上 (本例中我将使用计算机世界日报 168.160.224.185)。当连接成功后,发送Get 命令到 HTTP 服务器 去下载指定路径 上(/99/tips/)的文件。通过帮助函数 LogFile() 把下载的数据记录到本地磁盘文件中。
        char fname[MAXPATH];
        void LogFile(char *p)
        {
        FILE *fp=fopen(fname,a+);
        fprintf(fp,%s/n,p);
        fclose(fp);
        }
        
        BOOL HttpClient(void)
        {
        WSADATA ws;
        SOCKET s;
        struct sockaddr_in addr;
        
        int iResult;
        long lResult;
        char strSubAddr[100], strBuffer[100];
        
        lResult = WSAStartup(0x0101,&ws);
        s = socket(AF_INET,SOCK_STREAM,0);
        
        addr.sin_family = AF_INET;
        addr.sin_port = htons(80);
        addr.sin_addr.s_addr = inet_addr
        (168.160.224.185); // 计算机世界日报
        iResult=connect(s,(struct sockaddr *)
        &addr, sizeof(addr));
        if(SOCKET_ERROR == iResult)
        {
        // 连接失败
        WSACleanup();
        return FALSE;
        }
        else {
        // 连接成功
        strcpy(strSubAddr, GET /99/tips/ /r/n);
        strcpy(fname, index.htm);
        iResult = send(s, strSubAddr,strlen(strSubAddr),0);
        
        // 下载文件
        do {
        strset(strBuffer, );
        iResult = recv(s,strBuffer,sizeof(strBuffer),0);
        LogFile(strBuffer);
        } while( iResult !=0 );
        }
        
        WSACleanup();
        return TRUE;
        }
        
三、测试
    打开Visual C++ 5.0, 用MFC创建基于对话框的工程Test, 并在对话框上放 置Test 按 钮, 然后添加测试代码。
        
        Void CTestDlg::OnTest()
        {
        HttpClient();
        }
        
    
    编译并运行该测试程序,在测试对话框中,单击 Test 按钮,
    http://www.computerworld.com.cn/99/tips/的index.htm文件将被下载到本地。
        
四. 结 论
    这应该就是Netscape Navigator,Internet Explorer以及其他浏览器实现Internet访 问的基本代码了.在这些浏览器中,其他百分之九十以上的代码主要用于HTML显示等 本地处理上。
    
    读者如果有兴趣,基于这些代码,再加入一些解释HTML命令的代码,就可以正确显示 所下载的HTML文件, 那也就是说将拥有自己版本的一个百分之百的浏览器了。何不一试 ?
 
vc-httpclient:基于Microsoft visual c++ 6.0。实现http客户端发送GET、POST请求 立即下载

相关推荐

HTTP Client C++实现

CHttpClient.rar HTTP Client C++实现

VC(wininet类) 用wininet实现https访问

VC(wininet类) 用wininet实现https访问 以前项目中实现了wininet类对http的get和post访问,同样方法访问https的服务时出错, SendRequest函数异常,返回错误:与服务器的连接被重置 解决办法: OpenRequest的dwFlags设置为 INTERNET_FLAG_SECURE | INTERNET_FLAG_IGNORE_CERT_CN_INVALID | INTERNET_FLAG_IGNORE_CERT_DATE_INVALID 例如: conn1-&

weixin_41885527的博客 1358

vc用socket实现客户端服务端通信

vc用socket实现客户端服务端通信,包含源代码,在vc里面新建并行工程

c++中如何接收和发送http请求

主要是用于c++进行http的访问,请求接收与发送数据,使用工具为winhttp第三方库。

weixin_44970932的博客 7896

WinSock 实现http协议

1.这个是一个win32 WinSock api 实现http协议.里面的类CSocketHttpImplement是主要的模块(如果要用就这个类移过去就行哈),大家可以用于正式的项目。这个再已经经过大量测试通过。 2.这个类的调用主要是public的函数。 3.vs2005编译过得哈,大家如果环境不同也许需要改一点点,这些网上都可以查到环境要怎么改!相信大家都能搞定!就这个例子有啥子问题的可以问我190658681 4.如果看不懂代码的,可以去了解哈http协议哈!或者直接用winnet去写下载.用WinSock api要复杂一些哈!

vc++ 开发的HTTP SERVER服务器

使用vc开发的http server服务器程序,可提供web的访问等服务功能。

用 VC++ 和 Winsock 实现与 HTTP 服务器通话

用 VC++ 和 Winsock 实现与 HTTP 服务器通话 Ji Hong 一、引 言 ---- Windows Socket API是一套开放的、支持多种协议的Windows下的网络编程接口,它包 括一个标准的 Berkeley Socket功能调用的集合,以及为Windows所作的重要扩充。 Windows Socket经过不断完善并在众 多公司的全力支持下,已成为Windows网络编

Y___Y的专栏 1327

winsock API写的简单的HTTP服务器 有源码

winsock API写的简单的HTTP服务器 有源码 非常简陋,只支持单个客户端。 运行该程序后,打开浏览器进行测试。 预下载该服务器上的文件,请在浏览器地址栏按如下格式输入: 192.168.1.188/F:\文档.txt 即: 服务器IP + 斜杠 + 文件全路径名 注意:同意目录下的favicon.ico不要删了。 有问题联系:hastings1986@163.com

从VC++仿QQ源码解析即时通讯系统核心:网络模型、协议设计与状态管理

即时通讯(IM)系统是现代网络应用的核心组件,其基础建立在网络编程、应用层协议和客户端架构之上。理解IM系统,首先要掌握其底层的网络通信模型,从经典的阻塞式Socket多线程模型,到现代高性能服务器普遍采用的I/O多路复用技术,都是为了解决高并发下的连接管理问题。在应用层,自定义二进制协议通过紧凑的包结构(如包含起始标志、长度、命令字和校验和)来定义消息边界,有效解决了TCP粘包/拆包问题,这是实现高效、可靠数据传输的关键。这些技术的核心价值在于构建稳定、实时的通信链路,支撑从一对一聊天到群组消息、状态同步

weixin_30268071的博客 398

PHP 对接建行生活订单推送接口

php对接建行订单推送

qq_43647026的博客 560

带隙基准源要点

要点: 负反馈>正反馈;电流镜匹配;双极型晶体管匹配;电阻匹配; 经过R0的电流????????????=????????????????−????????????????????????=∆????????????????????i_R0=(〖VBE〗_1-〖VBE〗_2)/R_0 =∆VBE/R_0 经过R1的电流????????????=i_R1= ????????????????????VBE/R_1 零温电流I = ∆????????????????????∆VBE/R_0 +

HI_WALLE的博客 2263

服务器无法通过http上传文件,用winsock通过http POST方式向服务器上传文件的有关问题...

当前位置:我的异常网» VB»用winsock通过http POST方式向服务器上传文件的有关用winsock通过http POST方式向服务器上传文件的有关问题www.myexceptions.net网友分享于:2015-08-26浏览:284次用winsock通过http POST方式向服务器上传文件的问题传输到服务器上的文件会出错,服务器端提示org.apache.commons...

weixin_39614561的博客 299

Ubuntu 22.04下Nvidia显卡驱动安装全攻略:从PPA源到避坑指南

本文详细介绍了在Ubuntu 22.04系统下安装Nvidia显卡驱动的完整流程,包括PPA源的使用、旧驱动清理、安装后验证及常见问题解决方案。特别针对机器学习开发者和图形设计师,提供了从基础安装到性能调优的全方位指南,帮助用户避免常见安装陷阱并优化GPU性能。

weixin_29213655的博客 381

C++ 用libcurl库进行http通讯网络编程

转自 http://www.cnblogs.com/moodlxs/archive/2012/10/15/2724318.html 目录索引: 一、LibCurl基本编程框架 二、一些基本的函数 三、curl_easy_setopt函数部分选项介绍 四、curl_easy_perform 函数说明(error 状态码) 五、libcurl使用的HTTP消息头 六、获

理性的幻想 7311

华为OD机试 - 比赛的冠亚季军(Python/JS/C/C++ 双机位C卷 100分)

有个运动员,他们的id为0到N-1,他们的实力由一组整数表示。他们之间进行比赛,需要决出冠亚军。比赛的规则是0号和1号比赛,2号和3号比赛,以此类推,每一轮,相邻的运动员进行比赛,获N (3\leq N< 10000)胜的进入下一轮,实力值大的获胜,实力值相等的情况,id小的情况下获胜,轮空的直接进入下一轮。(0 <= 实力值 <= 10000000000)。输入一行N个数字代表N的运动员的实力值。输出冠亚季军的id,用空格隔开。

学Java,找哪吒 1587

AI技术在电商中的实际应用

人工智能、电商、推荐系统、个性化、机器学习、深度学习 1. 背景介绍 电子商务行业近年来发展迅速,用户数量不断增长,商品种类日益丰富。然而,随着市场竞争的加剧,电商平台面临着如何提升用户体验、提高转化率、挖掘潜在商机等一系列挑战。人工智能(AI)技术作为一种新兴技术,凭借其强大的数

AGI×大数据,开启智能时代的认知跃迁;解码AGI,赋能数据驱动的智能革命。 1740

HttpClient封装,get请求和post请求,文件下载和上传

 public void sendRequest(RequestMethod method, String target, Map params, final HttpTaskListener listener) {   IKLog.e("===url: " + method + ", " + target);// TODO 测试用打印URL   IKLog.e("===url para

幸福的小金火 2000

基于VisionMaster实现数据实时存储至MySQL (二)

摘要:之前的分享主要聚焦于简单的一维数据实时存储。但在做缺陷检测项目时,情况往往更加复杂:一张检测图像中可能同时存在多个缺陷,每个缺陷都有一组独立的核心参数(如质心、长短轴、面积等)。如何在 MySQL 中记录这些成组出现的缺陷数据,而不只是简单的单条记录?

haier123888的博客 226
上一篇: 得到网卡编号(MAC地址)
下一篇: Socket中如何设置连接超时
JamesXing
博客等级 码龄20年 30粉丝 3原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值