- #include <iostream>
- #include <stdio.h>
- #include <winsock.h>
- #include <conio.h>
- using namespace std;
- #pragma comment("ws2_32.lib")
- string host2ip(const string& strdomain);
- void save2file(char *buffer,const string& filename);
- int getlength(const string& sheader);
- bool getstatus(const string& sheader);
- int getleftlength(const string& sheader);
- void sethttphead(const string& file,const string& server);
- int port = 80;
- int error=0;
- string serveraddr;
- int i = 0;
- const int BUFFER_SIZE = 1024;
- char buffer[BUFFER_SIZE] = {0};
- char msg[BUFFER_SIZE];
- FILE *f;
- const string file = "/BT/200801/3/117906.torrent";
- const string url = "www.supbt.com";
- const string filename = "117906.torrent";
- int main(void)
- {
- int r;
- WSADATA wsa;
- SOCKET sock;
- struct sockaddr_in sin;
- f = fopen(filename.c_str(),"ab");
- sethttphead(file,url);
- if(WSAStartup(MAKEWORD(2,2),&wsa))
- {
- printf("WSAStartup Error: %d/n",WSAGetLastError());
- getche();
- return -1;
- }
- if((sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP))==INVALID_SOCKET)
- {
- printf("Socket Error: %d/n",WSAGetLastError());
- getche();
- return -1;
- }
- sin.sin_family=AF_INET;
- sin.sin_port=htons(port);
- serveraddr = host2ip(url);
- cout << serveraddr << endl;
- sin.sin_addr.s_addr=inet_addr(serveraddr.c_str());
- if(connect(sock,(struct sockaddr *)&sin,sizeof(sin))==SOCKET_ERROR)
- {
- printf("Connect Error: %d/n",WSAGetLastError());
- printf("请检测网络连接!/n");
- getche();
- return -1;
- }
- if((r=send(sock,msg,sizeof(msg),0))==SOCKET_ERROR)
- {
- printf("Send Error: %d/n",WSAGetLastError());
- getche();
- return -1;
- }
- memset(buffer,0,BUFFER_SIZE);
- if((r=recv(sock,buffer,BUFFER_SIZE,0))==SOCKET_ERROR)
- {
- printf("Recv Error: %d/n",WSAGetLastError());
- closesocket(sock);
- return -1;
- }
- string header = string(buffer);
- int ilength = getlength(header);
- int leftlength = ilength;
- int icount;
- if(getstatus(header)){
- //current is r
- char *q = buffer;
- char *p = strstr(buffer, "/r/n/r/n");
- p += 4;
- //注意这里得 r - (p-q) 非常关键得问题
- fwrite(p,r - (p - q),1,f);
- leftlength -= r - (p - q);
- int i=0;
- icount = r - (p - q);
- while(true)
- {
- memset(buffer, 0, BUFFER_SIZE);
- r = recv(sock, buffer, BUFFER_SIZE, 0);
- if (r < 0) {
- closesocket(sock);
- return 2;
- }
- if (r == 0) {
- break;
- }
- int tmp;
- tmp = leftlength; //209 100 100 92
- leftlength -= r;
- if(leftlength > 0){
- fwrite(buffer,r,1,f);
- icount += r;
- }
- else if(leftlength == 0){
- //
- break;
- }
- else{
- icount += tmp;
- fwrite(buffer,tmp,1,f);
- break;
- }
- cout << i++ << " r is "<< r << endl;
- }
- }else{
- cout << "http protocal error" << endl;
- }
- cout << icount << endl;
- fclose(f);
- closesocket(sock);
- WSACleanup();
- getche();
- return 0;
- }
- /*
- 构造HTTP头
- */
- void sethttphead(const string& file,const string& server)
- {
- strcat(msg,"GET ");
- strcat(msg,file.c_str());
- strcat(msg," HTTP/1.1");
- strcat(msg,"/r/n");
- strcat(msg,"Accept:*/*");
- strcat(msg,"/r/n");
- //strcat(msg,"Accept-Language: zh-cn");
- //strcat(msg,"/r/n");
- //strcat(msg,"Accept-Encoding: gzip, deflate");
- //strcat(msg,"/r/n");
- strcat(msg,"User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
- strcat(msg,"/r/n");
- strcat(msg,"Host:");
- strcat(msg,server.c_str());
- strcat(msg,"/r/n");
- strcat(msg,"Connection: Keep-Alive");
- strcat(msg,"/r/n");
- strcat(msg,"/r/n");
- }
- //---------------------------------------------------------------------------
- /*
- 将domain 转换为IP地址
- */
- string host2ip(const string& strdomain)
- {
- SOCKADDR_IN saddr;
- WORD wVersionRequested;
- WSADATA wsaData;
- hostent *pHostIp;
- int nErrorNum;
- wVersionRequested = MAKEWORD(2, 2);
- nErrorNum = WSAStartup(wVersionRequested, &wsaData);
- if(nErrorNum != 0)
- {
- return "";
- }
- saddr.sin_family = AF_INET;
- pHostIp = gethostbyname(strdomain.c_str());
- if(pHostIp == NULL)
- {
- return "0.0.0.0";
- }
- WSACleanup();
- return (string)inet_ntoa(*(LPIN_ADDR)*(pHostIp->h_addr_list));
- }
- /*
- 该方法为测试用法,并为应用到项目中
- */
- void save2file(char *buffer,const string& filename)
- {
- FILE *f;
- f = fopen(filename.c_str(),"a+");
- fwrite(buffer,strlen(buffer),1,f);
- fclose(f);
- }
- /*
- 该方法获取待下载文件大小
- */
- int getlength(const string& sheader){
- char * cont_len_pos;
- unsigned long cont_length;
- const char* header = sheader.c_str();
- cont_len_pos =(char *)strstr(header,"Content-Length:");
- cont_len_pos = (char *)strchr(cont_len_pos,' ');
- cont_len_pos++;
- sscanf(cont_len_pos, "%ld", &cont_length);
- return cont_length;
- }
- /*
- 该方法判断是否Get成功,不成功就取消下载文件
- */
- bool getstatus(const string& sheader){
- string start = "HTTP/1.1 200 OK";
- if(sheader.find(start,0) != string::npos){
- return true;
- }
- else{
- return false;
- }
- }
- /*
- 该方法并没有用到,开始考虑多了
- */
- int getleftlength(const string& sheader){
- int nreturnl = 0;
- int ilength = sheader.length();
- string _send = "/r/n/r/n";
- int istart = sheader.find_last_of(_send);
- if(istart != string::npos){
- nreturnl = ilength - istart -_send.length();
- }
- return nreturnl;
- }
相关推荐
用 dism 合并与删除 wim 映像
一、合并 假设 installA.wim 有 3 个映像,installB.wim 有 1 个映像。 1、全部合并 将 installA.wim 中的 3 个卷映像合并到 installB.wim 中,这样 installB.wim 中的卷映像增加到 4 个。 dism/export-image/sourceimagefile:d:\installA.wim/sourceindex:1/destinationimagefile:d:\installB.wim dism/export-image/source
HTTP下载新功能研究
W5500的时候是OK的每次下来不会超过2049个数据 但是ESP8266看到一次过来2092个数据 装不下! 单片机内存吃紧 研究HTTP执行下载的时候对一个参数! 第一步:http://ibinhub.com/login.php上传一个文件 后面开始PC茉莉 发送: #define HTTP_POST "POST /data.php HTTP1.1\r\...
人工智能-CS188 Project 2: Multi-agents
一、项目介绍 项目介绍网页 项目代码下载 本项目是采用Berkeley的CS188课程内容实习二的内容,在这个项目中,我们将为经典版本的Pacman 设计自动算法,包括幽灵。在此过程中,我们将实现 minimax 和 expectimax 搜索并尝试评估函数设计 完成作业只需要完成5个题目,按照项目介绍的步骤进行完成,主要是在multiAgents.py文件中进行补充代码 二、代码详情 1、Question1:Reflex Agent 略 2、Question2:Minimax 套用ppt上的minm
lwip接收文件 stm32_stm32 lwip 如何访问网页下载文件
int BIN_currentlen_left ( char * recv_data ){intlen ;char data_buf[60];/*缓存*/char cache_buf[20];/*缓存*//*1、在接收到服务器的数据后,查找"Content-Range: bytes"字段,并返回数据地址*//*2、在接收到服务器的数据后,查找"\r\n"字段,并返回数据地址*//*3、获取长度...
使用C#实现Padim算法的训练和推理:智能缺陷检测的前沿技术
Padim (Patch-based Deep Image Model) 是一种用于无监督异常检测的深度学习算法。它通过提取图像中的局部特征(patch),并在这些特征上构建一个正常样本的分布模型来识别异常。无监督学习:不需要标注数据,适用于缺乏标签的情况。局部特征提取:通过卷积神经网络提取图像的局部特征(patch)。低秩近似:利用低秩近似构建正常样本的协方差矩阵,有效降低计算复杂度。鲁棒性强:能够处理多种类型的缺陷和噪声。
产品需求从场景,初始需求IR,产品需求 OR,设计需求DR,设计规格DS的具体案例说明,以扫地机产品为例
摘要: 以扫地机器人"宠物粪便避障"功能为例,说明从用户场景到产品落地的完整需求转化路径。初始需求(IR)源于养宠家庭痛点,要求100%避障并自动告警;产品需求(OR)转化为≥98%识别准确率等量化指标;设计需求(DR)拆解为感知、决策、执行三大技术模块;最终形成传感器选型(如索尼IMX678)、芯片规格(高通QCS6490)等设计规格(DS)。通过实验室模拟和用户测试验证,该功能使产品溢价30%,养宠家庭购买占比达52%,实现技术与商业价值的统一。
linux C++ HTTP 下载文件 dowloadFile()
DownLoadFIle(std::string serverName, std::string URL,std::string localDirectory) { FILE *fp; if(!(fp = fopen(localDirectory.c_str(),"wb+"))) { printf("can't open loc
全球建筑物提取数据集(免费下载):微软/GlobalMLBuildingFootprints
这个是GitHub上的开源数据集: https://github.com/microsoft/GlobalMLBuildingFootprints 介绍 必应地图正在世界各地发布开放式建筑足迹。我们从 2014 年到 2021 年间的 Bing Maps 图像中检测到了 7.77 亿座建筑物,包括 Maxar 和 Airbus 的图像。数据可在 ODbL 下免费下载和使用。该数据集补充了我们的其他版本。 包括的地区 执照 此数据由 Microsoft 根据Open Dat..
Linux下使用Socket实现http文件下载
Linux linux// 转载自 http://blog.youkuaiyun.com/xiongyangg/article/details/50767482 // g++ download_demo.cpp -lpthread #include <stdio.h> #include <string.h> #include <sys/socket.h> #include <arpa/inet.h> #incl
[内网基础] 内网基础知识 —— Windows 工作组
在一个大型单位里,可能有成百上千台计算机互相连接组成局域网,如果不对这些计算机进行分组,网络的混乱程度是可想而知的。Windows 为了解决这一问题,就产生了工作组(Work Group)这个概念。Windows 工作组尝试将不通的计算机按功能(或部门)分别列入不同的工作组,例如技术部的计算机都列入 “技术部” 工作组、行政部的计算机都列入 “行政部” 工作组。要想访问某个部门的资源,只要在 “网络” 里双击该部门的工作组名,就可以看到该部门里的所有计算机了。
Python爬虫实战:高德地图POI信息爬取(餐馆/加油站等),附选址分析技巧
高德API配置AMAP_KEY = "你的高德API Key" # 替换成自己的Key# 爬取参数CITY = "成都" # 城市DISTRICTS = ["锦江区"] # 区域,可添加多个(比如["锦江区", "武侯区"])KEYWORDS_LIST = ["川菜馆", "加油站"] # 要爬取的POI类型TYPES = {"川菜馆": "050101", # 餐饮服务→中餐→川菜馆(高德POI分类编码)"加油站": "110100" # 交通设施→加油站。
C++实现HTTP文件下载:从Socket到分块编码的完整实践
HTTP协议作为互联网数据交换的基石,其核心在于客户端与服务器之间基于请求-响应的通信模型。理解其工作原理,不仅需要掌握状态码、请求头、响应头等基本概念,更需要深入网络编程层面,通过Socket编程实现数据的可靠传输。对于追求极致性能或需要在资源受限环境中运行的场景,直接使用底层API进行开发具有重要价值,它能实现对内存、连接和I/O的精细控制。例如,在处理大文件下载或需要实现断点续传、分块传输编码解码等高级特性时,这种底层控制能力尤为关键。本文通过一个具体的C++项目,详细展示了如何从零开始,使用Wins
AB测试面试题
AB实验流程以一个实际的业务场景去描述AB实验流程,限定场景来减少和面试官的信息差,确保沟通高效可以以自己简历上某个相关项目的场景来举例,或者以面试的岗位对应的业务来举例子。不能光自己说,要让面试官参与进来,引导面试官往自己熟悉的内容提问,从被动转为主动。回答要有逻辑性,简洁、准确的表达。还是延用之前提到的项目案例,假设之前抖音拍摄页面中右下角相册功能的icon 由相册图标改为 用户相册的最新一张照片这个案例写在了我的简历中。
推荐两篇Linux下的Socket文章
Linux Socket Linux下Socket编程 HTTP 协议的简介 HTTP 协议的简介 HTTP协议是一种超文本传输协议(Hypertext Transfer Protocol),工作于网络应用层,自1990年起广泛应用于WWW 的全球信息服务,HTTP协议的详细说明可以在网上查阅RFC2518、RFC2616等文档。 HTTP 协议老的标准是HTTP
温度PID控制PLC程序
温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值
android 蓝牙通讯demo
android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。
【Linux之旅】HTTP 协议解析:从请求格式到构建 Web 服务器
本文将从 HTTP 协议的请求/响应格式出发,逐一拆解 URL、请求方法、状态码、常用 Header、Connection 长连接等核心概念,亲手实现一个支持 GET 和 POST 的最简 HTTP 服务器,并逐步扩展为能返回静态文件、解析表单数据的功能完备的 Web 服务器。读完本文,你将彻底理解 HTTP 协议的底层约定,并能从头写出一个可被浏览器访问的真实 Web 后端。
OV9734 DATASHEET,完整规格书
OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等
【Linux网络】深入理解 HTTP 协议(四):完善 C++ HTTP 服务器:从协议原理到生产级实现
HTTP 协议作为 Web 世界的基石,支撑着我们每天浏览的每一个网页、调用的每一个 API。虽然 Nginx、Apache 等成熟服务器已经足够强大,但亲手实现一个 HTTP 服务器,能让我们穿透抽象层,真正理解 “浏览器输入 URL 按下回车” 背后发生的一切。本文将从 HTTP 协议最核心的 GET/POST 请求讲起,一步步拆解 HTTP 服务器的分层架构,实现一个支持静态资源托管、动态路由注册、完整协议解析的 C++ HTTP 服务器。然后我们会深入讲解Nginx 生产级部署的最佳实践,最后对比自
怀旧版电脑GBC模拟器
再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。
500行代码构建完整HTTP服务器:Tinyhttpd终极学习指南
Tinyhttpd是J. David Blackstone在1999年编写的超轻量级HTTP服务器,整个项目代码不到500行,却完整实现了HTTP服务器的核心功能。这个项目被誉为学习网络编程和HTTP协议的经典教材,通过极简的代码展示了服务器程序的本质。无论你是网络编程初学者还是想深入理解HTTP协议实现原理的开发者,Tinyhttpd都能为你提供宝贵的实践机会。 ## 🔥 项目核心亮点:为什
UDP vs TCP:Linux Socket编程中的协议选择指南
UDP和TCP各有优劣:UDP以速度取胜,适合实时和轻量级应用;TCP以可靠性为核心,适合数据敏感场景。在Linux Socket编程中,根据应用需求(延迟容忍度、数据大小、网络条件)做出明智选择。始终通过原型测试验证性能(如使用iperf工具),确保最佳用户体验。
C++多线程断点续传下载器实现:从HTTP协议到工程实践
在并发编程和网络应用开发中,多线程技术与断点续传机制是提升系统性能和可靠性的核心概念。多线程通过并行处理任务,充分利用多核CPU资源,显著提高I/O密集型操作的效率;而断点续传则基于HTTP协议的Range请求头实现,允许在传输中断后从中断处继续,避免重复下载,增强了应用的健壮性。这两项技术的结合,在文件传输、数据同步等场景中具有重要价值。本文聚焦于C++后端开发,通过实现一个支持多线程并发下载与断点续传的文件下载器,深入探讨了网络编程、线程同步及文件I/O等工程实践。文中详细解析了HTTP Range请求
【Linux网络编程】第二弹---Socket编程入门指南:从IP、端口号到传输层协议及编程接口全解析
理解源 IP 和目的 IP;认识端口号:端口号范围划分,理解 "端口号" 和 "进程 ID",理解源端口号和目的端口号,理解 socket;传输层的典型代表:认识 TCP 协议,认识 UDP 协议;网络字节序;socket 编程接口:socket 常见 API,sockaddr 结构~~~
基于 C++ 手写 HTTP 服务器:从请求解析到响应构建全流程解析
本文介绍了常见应用层协议及其用途,重点解析了HTTP协议的工作原理。通过实现一个简易HTTP服务器,展示了HTTP请求/响应的报文结构(首行、报头、空行、正文)及处理流程。文章对比了GET和POST方法的区别:GET将参数拼接在URL中,POST则将参数放在请求正文。最后强调HTTP协议本质是遵循特定格式的字符串通信,通过实现服务器揭示了浏览器与服务器交互的底层机制。
使用PHP脚本下载远程文件
使用PHP脚本下载文件 说明:纯属无聊,写着玩。使用PHP脚本来下载文件,无非是通过两种方式,一种是使用system、exec等即有的函数调用系统自带的下载工具,比如 wget 之类的来下载文件,还有一种是使用php本身利用Socket来下载文件,我选择第二种方式。使用Socket下载文件,首先如果是http协议的文件,必须明白HTTP协议的运行过程,如果是FTP协议的则要了解ftp协议运行
5201



被折叠的 条评论
为什么被折叠?



