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

通过HTTP协议利用VC++上传图片至服务器 由于项目的临时需求,需要将以前抓拍在本机的BMP图片上传至服务器。本文主要记录如何解决这个问题。我们打算用http协议来上传数据,因此要用http协议的POST方式。首先,要理解http的POST协议。它一般由三部分组成:协议头,具体内容以及协议尾。如下例所示:POST /upload_file/UploadFile HTTP/1.1Accept: text/plain, */*Accep 阅读详情

用 VC++ 和 Winsock 实现与 HTTP 服务器通话 
作者:Ji Hong 


一、引 言
---- Windows Socket API是一套开放的、支持多种协议的Windows下的网络编程接口,它包 括一个标准的 Berkeley Socket功能调用的集合,以及为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++实现HTTP协议的两端:HTTP Server和HTTP Client实战指南 HTTP(HyperText Transfer Protocol)即超文本传输协议,是互联网上应用最为广泛的一种网络协议。它基于客户端/服务器模型,定义了客户端(通常指Web浏览器)和服务器间请求与响应的规则。HTTP协议以其简洁、易于扩展和高度灵活性成为了信息交换的基石,而它无状态的特性则为互联网通信的高效传输提供了保障。HTTP Server,全称为超文本传输协议服务器,是一种用于接收客户端请求并返回特定响应的应用程序。 阅读详情

相关推荐

VC++ HTTP Get Post请求

VC++ HTTP Get Post请求

VC连接HTTP服务器 & MFC 处理 HTTP 请求的基本方法

1.AfxParseURL函数,该函数解析URL字符串并返回服务的类型及组件,包含在 afxinet.h 头文件中。  BOOL AFXAPI AfxParseURL(LPCTSTR pstrURL,DWORD& dwServiceType,CString& strServer,CString& strObject,INTERNET_PORT& nPort);       pstrURL :

shaderdx的专栏 1万+

比较几款国际主流的电子元器件及物料清单管理软件 – 工具汇总

Arenasolution 老牌的基于云计算物料清单管理软件,bom.com就是他们家的,10天免费试用,功能被分成4个不同的产品, 和传统ERP功能上有重叠,偏向于物流生产规划,一定程度可以取代ERP的生产规划模块,平均价格70美元/月/席位。网页客户端,不支持离线   SiliconExpert 曾经的老牌物料清单管理软件,后被Arrow 收购,14天免费试用,功能被分成4个不同的产品

u012062784的专栏 7236

VC/MFC关于Http协议的应用总结

       本文章希望能帮助其他VC/MFC的开发人员解释一下关于其使用http协议与远方的服务器进行交互的一些疑点。文章观点仅限个人理解,大家参考一下,如有错漏,不负责。       首先,什么是协议?在开发项目的过程中,我们常常会听说到各种协议,如TCP/UDP/HTTP/FTP等协议。就个人理解看,协议分为两种,第一种是技术层面的协议,如上述说的,大家应该不陌生,起码听说过。第二种是会话层...

周春岳的程序人生 1005

AP发票批量付款程序(WEB ADI)

CREATE OR REPLACE PACKAGE MEW_AP_BATCH_PAYMENTS_PKG IS   PROCEDURE MAIN(P_BATCH_ID          NUMBER                 ,P_ORG_ID            NUMBER                 ,P_BANK_ACCOUNT_NAME VARCHAR2

储藏室 5052

Freemarker整合poi导出带有图片的Excel教程

Freemarker整合poi导出带有图片的Excel教程 https://blog.youkuaiyun.com/x541211190/article/details/105675771根据此人博客可完成此功能,但原文中有一处错误需要纠正,当单元格合并时,计算起始单元格有错误。 源代码: /** * 构造合并单元格集合 * * @param createRowIndex: * @param cellRangeAddresses: * @param startIndex: * @param c

weixin_39403349的博客 1004

如何使用VC进行HTTP连接

CString httpRequest(char* lpHostName, short sPort, char* lpUrl, char* lpMethod, char* lpPostDara, int nPostDataLen){    HINTERNET hInternet, hConnect, hRequest;    BOOL bRet;    CString strResponse;  

jANxIN的专栏 2843

保姆级教程:用YOLOv5s训练PCB缺陷检测模型(附北大公开数据集)

本文提供了一份基于YOLOv5s的PCB缺陷检测模型从零开始的完整实战教程。详细解析了如何使用北大公开数据集,涵盖环境搭建、数据处理、模型训练、性能评估及优化部署全流程,并针对工业场景中常见的类别不均衡问题给出了具体解决方案,旨在帮助开发者快速构建高精度的自动化质检系统。

weixin_28285943的博客 308

C++用Windows下的winsock实现http的POST请求

一个HTTP.二进制POST和HTTP指定长度接收的C++实现 //CppSocket.cpp:Definestheentrypointfortheconsoleapplication.//#include"stdafx.h"#include<cstdlib>#include<string>#include<algorithm>#include<iostream>#include<fstream>#inclu...

syj_comeon的专栏 1933

【头歌educoder】离散数学实训参考-第二章-关系-part1-关系基础

python实现离散数学-关系基础-二元关系

wander_alice的博客 8465

SAP-RPT-1 深度解读:面向企业表格数据的 rapid one

摘要: SAP在TechEd 2025大会上推出面向企业结构化数据的SAP-RPT-1(Relational Pretrained Transformer),旨在通过in-context learning直接预测表格数据中的缺失值,无需传统机器学习流程。与LLM不同,RPT专为业务表格设计,支持实时预测(如交货延迟、回款风险等)。提供Small(高吞吐)、Large(高精度)和开源版本,用户可通过无代码Playground(上传CSV并用[PREDICT]标记目标列)或Python API快速验证。典型场景

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 238

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

用VC++和Winsock实现与HTTP服务器通话 2003-04-10 Ji Hong 

JamesXing的专栏 1132

基于Spring Boot 3 + Vue 3 + Vite的现代化社区订餐系统设计与实现

本文将详细阐述系统的整体架构、数据库设计、核心功能模块(用户管理、餐厅管理、菜品浏览、购物车、订单管理)的实现细节,并提供关键代码示例。<el-input v-model="loginForm.password" type="password" placeholder="密码" prefix-icon="Lock" show-password />.requestMatchers("/api/auth/**", "/api/dishes/public/**").permitAll() // 公开接口。

2201_76125393的博客 468

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

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

weixin_30268071的博客 398

利用NLP技术分析爬取的文本数据:Python爬虫与自然语言处理实战

网页爬虫(Web Crawler)是一种自动化脚本,通过模拟人类浏览网页的方式,定期抓取网页内容并进行分析和存储。对于大规模的数据抓取任务,爬虫技术提供了极大的便利。常见的Python爬虫库有requestsSelenium等。在本篇博客中,我们从爬取网页文本数据开始,通过清洗和预处理,最终利用自然语言处理技术(包括情感分析、文本分类等)对数据进行了深度分析。通过该过程,我们展示了如何使用Python爬虫抓取文本数据,并利用NLP技术进行分析和建模。

2201_76125261的博客 628

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

VC++实现简单HTTP服务器

此程序实现了浏览器通过IP地址和端口访问HTTP服务器,服务器简单做出回应,是根据TCP服务器程序改编的,用VC++6.0编译后,使用Google浏览器访问,能达到预期效果。由于HTTP协议是由TCP协议而来,此程序就是用TCP程序作了简单改变,缺少众多请求处理过程。

codeGenXY的专栏 9894

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

C++ 实现 发送HTTP Get/Post请求

1、简述最近简单看了一下关于HTTP请求方面的知识,之前一直用Qt来实现,有专门HTTP请求的QNetworkAccessManager类来处理,实现也比较简单,这里主要讲解一下用C++代码来实现HTTP 的Get/Post请求。 一个HTTP请求报文由请求行(request line)、请求头(header)、和请求数据*3个部分组成,注意请求头部分和请求数据中间需要加上“\r\n”*。下图给

前行之路还需前行 6万+

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

vc++简单的使用http--get请求网页保存html

头文件: // stdafx.h : 标准系统包含文件的包含文件, // 或是经常使用但不常更改的 // 特定于项目的包含文件 // #pragma once #include "targetver.h" #include <stdio.h> #include <tchar.h> #include <iostream> #include <windows.h> #include <string> #include <cstring&gt

bangtanhui的博客 927

vc++实现http下载文件 (附带源码)

在 VC++ 中实现 HTTP 下载文件的功能,通常会使用 Windows API 提供的 WinINet 库或者 Windows Sockets (Winsock) 来进行网络通信。这里我们将使用 WinINet 库,它提供了简单易用的接口来进行 HTTP 请求和文件下载。

欢迎来到我的博客!这里是一个专注于计算机技术的分享平台,涵盖编程开发、算法研究、系统架构、软件工程等多个领域。无论你是初学者还是资深开发者,都能在这里找到有价值的内容。 876

C/C++实现简单高并发http服务器

C/C++实现简单的高并发http服务器

hulinhulin的专栏 966

自定义http服务器开发过程,支持web访问

http协议是目前web访问最为常用的一种协议,目前几乎所有的终端访问都基于此协议。该例程是学习tcp编程,http协议编程,tcpserver开发的佳例。采用TCP协议基础,建立http协议,实现web客户端访问。采用vc++6.0开发,实现了socket服务类。

iscada的博客 446

C++ 通过TCP Socket实现简单Http服务器

实现一个简单的Http服务器,基于windows 平台。总共五个文件 : HttpServer.hpp、HttpServer.cpp、Utils.hpp、Utils.cpp、main.cpp。

mark_jl的博客 714
上一篇: 在Visual C++中用ADO进行数据库编程
下一篇: 用InstallShield制作专业Windows安装软件
ren20
博客等级 码龄27年 1粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值