http服务-搭建简易的http服务器

article/2025/9/18 11:55:08

##http服务-搭建简易的http服务器
仅仅实现了Post和Get,也就简单的使用了 200 OK,100-continue和发送http格式的文本而已,其实我们只要按照HTTP协议收发数据即可。

  • 先来一张做http上传功能时的意外收获,也是待会的测试图片
    七夕
  • 浏览器访问我们所建立的链接
    其实就是要返回一段http协议要求的内容即可,当然首先我们要建立一个监听
//建立监听,比较简单,看文末尾贴出的代码即可
if(xml_parse.find("GET")!=string::npos)
{//向客户端发送200 ok及相应的文本信息sprintf( buf, "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\nContent-Length: %d\r\n\r\n%s",strlen("Hello World!"),"Hello World!");send(clientsoc, buf, strlen(buf)+1, 0);printf("已回复 200 OK\n");continue;
}
//如果提交的内容过大,提交可能会发送要求100-continue,将数据分开发送。
if(xml_parse.find("100-continue")!=string::npos)
{sprintf( buf, "HTTP/1.1 100-continue\r\n");send(clientsoc, buf, strlen(buf)+1, 0);printf("已回复100-continue!\n");//这个是不太管用的,连续两次image_contimue=false;
}
  • 这是用浏览器直接与http服务器建立连接后返回的文本信息。http://127.0.0.1:9000。
    浏览器访问

  • 提交表单,先写一份提交表单的简单html文件
    上传文件时,一定要注意 enctype=“multipart/form-data”,否则只是上传的文件路径

<html><head></head><body><!-上传文件时,一定要注意  enctype="multipart/form-data",否则只是上传的文件路径><form action="http://127.0.0.1:9000" method="post" enctype="multipart/form-data"><input type="file" name="update"/><input type="submit" value="上传"/></form><form action="http://127.0.0.1:9000" method="post"><input type="text" name="myText"/><input type="submit" /></form></body>
</html>
  • 左侧使我们的http服务器,右侧是我们刚写的html文件

    上传图片

  • 提交文本信息
    提交文本

  • 提交图片信息

  • 上传文字

    http服务器收到的图片
    图片结果

  • 附上http服务器源码

 #include "stdafx.h"#include <winsock2.h>#pragma comment(lib,"ws2_32.lib")#include <fstream>#include <iostream>#include <string>using namespace std;int _tmain(int argc, _TCHAR* argv[]){SOCKET serversoc;   SOCKET clientsoc;SOCKADDR_IN serveraddr;SOCKADDR_IN clientaddr;char buf[1024];int len;WSADATA wsa;WSAStartup(MAKEWORD(2,0),&wsa);	//初始化WS2_32.DLL//创建套接字if((serversoc = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) <= 0)  {printf("套接字socket创建失败!\n");}//命名协议,IP,端口serveraddr.sin_family = AF_INET;serveraddr.sin_port = htons(9000);serveraddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);//绑定套接字if(bind(serversoc, (SOCKADDR *)&serveraddr, sizeof(serveraddr)) != 0){printf("套接字绑定失败!\n");}start:printf("开始监听...\n");//监听请求if(listen(serversoc, 1) != 0){printf("监听失败!\n");}len = sizeof(SOCKADDR_IN);//接收请求if((clientsoc = accept(serversoc, (SOCKADDR *)&clientaddr, &len))<=0){printf("接受连接失败!\n");}printf("**************连接成功*********\n");Sleep(100);//接收数据bool image=false;bool image_contimue=false;bool text=false;while(1){memset(buf,0,1024);int x=0;x=recv(clientsoc, buf, 1024, 0);if(x<= 0)	{printf("关闭连接!\n");closesocket(clientsoc);goto start;}cout<<buf<<endl;string xml_parse(buf);if(xml_parse.find("GET")!=string::npos){sprintf( buf, "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\nContent-Length: %d\r\n\r\n%s",strlen("Hello World!"),"Hello World!");send(clientsoc, buf, strlen(buf)+1, 0);printf("已回复 200 OK\n");continue;}//if(xml_parse.find("POST")!=string::npos){if(xml_parse.find("100-continue")!=string::npos){sprintf( buf, "HTTP/1.1 100-continue\r\n");send(clientsoc, buf, strlen(buf)+1, 0);printf("已回复100-continue!\n");//这个是不太管用的,连续两次image_contimue=false;}else{int off_set=0;if(off_set=xml_parse.find("Content-Type: image")){if(off_set>0&&image_contimue==false){image=true;image_contimue=true;off_set=xml_parse.find_last_of("Content-Type: image");if(off_set<=0)continue;string tmp=xml_parse.substr(off_set+5);cout<<tmp<<endl;ofstream fout;fout.open("received.jpeg",ios::binary|ios::app);fout.write(buf+off_set+5,x-off_set-5);fout.close();}else if(image==true){if(image_contimue==true){ofstream fout;fout.open("received.jpeg",ios::binary|ios::app);fout.write(buf,x);fout.close();}}}}}}printf("关闭连接!\n");closesocket(clientsoc);goto start;WSACleanup();     //释放WS2_32.DLLreturn 0;
}

http://chatgpt.dhexx.cn/article/cUtMGLxh.shtml

相关文章

【C++】搭建HTTP服务器

目录 项目介绍 网络协议栈介绍 协议分层 数据的封装与分用 HTTP相关知识介绍 HTTP的特点 URL格式 URI、URL、URN HTTP的协议格式 HTTP的请求方法 HTTP的状态码 HTTP常见的Header CGI机制介绍 CGI机制的概念 CGI机制的实现步骤 CGI机制的意义 日志编写 套接字…

HTTP服务器开发教程

<![CDATA[ 概述 最近因为项目需要&#xff0c;必须自己实现一个HTTP服务器的部分功能。 需求大概是这样的&#xff0c;winform里使用webrowser控件显示一个本地的html页面&#xff0c;同时winform启动http服务&#xff0c;本地html页面里通过javascript使用XMLHttpReq…

Windows搭建HTTP服务器

Windows搭建HTTP服务器 1、开启Windows功能 打开控制面板-程序和功能-启用或关闭Windows功能&#xff0c;勾选Internet information services下拉框的全部选项。 2、搭建HTTP服务器 搜索IIS&#xff0c;打开Internet information services&#xff08;IIS&#xff09;管理器…

一条命令搭建HTTP服务器

文章目录 1.前言2.本地http服务器搭建2.1.Python的安装和设置2.2.Python服务器设置和测试 3.cpolar的安装和注册3.1 Cpolar云端设置3.2 Cpolar本地设置 4.公网访问测试5.结语 转载自远程内网穿透的文章&#xff1a;【Python】快速简单搭建HTTP服务器并公网访问「cpolar内网穿透…

HTTP服务器(一)

问&#xff1a;HTTP协议的职责是什么&#xff1f; 答&#xff1a;生成针对目标web服务器的HTTP请求报文&#xff1b; 对Web服务器请求的内容的处理。&#xff08;听起来挺像废话的…就是客户端向服务器发出的第一步 和 服务器接收最后一步&#xff0c;一种固定格式请求和对应…

HTTP服务

URL&#xff1a;Uniform Resource Locator&#xff0c;统一资源定位符&#xff0c;对可以从互联网上得到的资源的位置和访问 方法的一种简洁的表示&#xff0c;是互联网上标准资源的地址。 网址格式&#xff1a;<协议>://<主机或主机名>[:port]/<目录资源,路径&…

【HTTP协议与Web服务器】

HTTP协议与Web服务器 浏览器与服务器通信过程HTTP的请求报头HTTP请求报头结构HTTP的请求方法 HTTP应答报头HTTP应答报头结构应答状态 web服务器的c语言实现 浏览器与服务器通信过程 浏览器与Web服务器再应用层通信使用的是HTTP协议&#xff0c;而HTTP协议在传输层使用的是TCP协…

http文件服务器

收费工具&#xff0c;二百大洋。学生党勿扰。 程序下载链接:https://download.csdn.net/download/wocanimei007/87755375 无任何后门&#xff0c;请放心使用。 毫不夸张的说&#xff0c;应该目前市场上最好用的文件互传工具。 1 概述 在unbuntu和win上进行文件互传的时候&am…

HTTP/HTTPS服务器

HTTP/HTTPS 一、消息传播过程 1、发送消息的时候做的事情。 比如说客户端发送给的消息是&#xff1a;Hello World 首先是在客户端这里&#xff0c;数据会经过一系列处理从应用层传输到数据链路层。也就对应着调用send&#xff0c;将数据拷贝到内核&#xff0c;内核再协议栈&a…

HTTPS服务器

目录 HTTPS简介 https概念 SSL/TLS 加/解密方式 对称加密 非对称加密 消息摘要 数字签名 数字证书 http与https的区别 作业需求 ​编辑 HTTPS简介 https概念 HTTPS &#xff08;全称&#xff1a;Hyper Text Transfer Protocol over SecureSocket Layer&#xff0…

HTTP服务器搭建

文章目录 实验环境说明服务器配置下载安装HTTP服务修改配置文件 客户端测试Linux客户端测试Windows客户端测试 实验环境说明 主机系统系统版本IP地址服务端LinuxRHEL 7.0192.168.43.128/24客户端LinuxRHEL 7.4192.168.43.15/24客户端Windows 11Windows 11192.168.43.1/24 基本环…

WEB/HTTP服务器搭建

HTTP 对于软件都有服务和客户&#xff0c;有服务端和客户端 服务 就是在操作系统运行一个或者多个程序&#xff0c;并为客户端提供相应所需的服务 协议 就是计算机网络中进行数据交换而建立的规则、标准或约定的集合。只有遵守这个约定&#xff0c;计算机之间才能相互通信…

ESP32基础应用之HTTP 服务器

文章目录 1 HTTP服务器简介2 ApiPost测试工具3 HTTP服务器实验3.1 ApiPost之GET测试3.2 ApiPost之POST测试3.3 ApiPost值PUT测试 参考资料&#xff1a; esp32 http服务器编程指南 1 HTTP服务器简介 HTTP服务器一般指Web服务器&#xff0c;是指驻留于因特网上某种类型计算机的…

http 服务器搭建

目录 http 服务器搭建有很多条数据时用response.write测试服务器是否开启 http 服务器搭建 通过http模块提供的方法可以创建服务器 1 引入http模块 &#xff08;nodejs内置模块&#xff0c; 可以直接引入&#xff09; const http require(http);创建服务器http.createServer…

HTTP服务器(一)HTTP服务器入门介绍

一、简介 1.1、做项目的时候&#xff0c;要请求REST服务器。而FEST服务器还是用http基本原理(即阉割版)来请求。 1.2、请求端口EndPoint/请求方法Method/请求内容格式ContentType/请求的数类型PostData(一般为JSon格式)。 1.3、我们熟悉的HTTP、FTP、Telnet等协议都是建立在…

【八】http服务器开发--实现一个http服务器

文章目录 一、整体概述二、接收http请求三、响应http请求四、完整代码即效果4.1 完整代码&#xff1a;4.2 实现过程 附&#xff08;stat函数&#xff09; 一、整体概述 本节主要实现一个http服务器的示例&#xff1b;该http服务器的主要功能是&#xff0c;在浏览器端访问服务器…

蓝桥杯c语言基础试题答案,试题 基础练习 Huffuman树 蓝桥杯 C语言

资源限制 时间限制&#xff1a;1.0s 内存限制&#xff1a;512.0MB 问题描述 Huffman树在编码中有着广泛的应用。在这里&#xff0c;我们只关心Huffman树的构造过程。 给出一列数{pi}{p0, p1, …, pn-1}&#xff0c;用这列数构造Huffman树的过程如下&#xff1a; 1. 找到{pi}中最…

蓝桥杯基础试题 字母图形 C语言实现

资源限制 时间限制&#xff1a;1.0s 内存限制&#xff1a;256.0MB 问题描述 利用字母可以组成一些美丽的图形&#xff0c;下面给出了一个例子&#xff1a; ABCDEFG BABCDEF CBABCDE DCBABCD EDCBABC 这是一个5行7列的图形&#xff0c;请找出这个图形的规律&#xff0c…

蓝桥杯c语言b组试题及答案,2014蓝桥杯C语言本科B组预赛试题

2014蓝桥杯C语言本科B组预赛试题 2014 蓝桥杯 C/C语言本科 B 组预赛试题12014 蓝桥杯 C/C语言本科 B 组预赛试题(完整)1.啤酒和饮料啤酒每罐 2.3 元&#xff0c;饮料每罐 1.9 元。小明买了若干啤酒和饮料&#xff0c;一共花了 82.3 元。我们还知道他买的啤酒比饮料的数量少&am…

2018年蓝桥杯C语言B组

第一题 标题&#xff1a;第几天 2000年的1月1日&#xff0c;是那一年的第1天。 那么&#xff0c;2000年的5月4日&#xff0c;是那一年的第几天&#xff1f; 注意&#xff1a;需要提交的是一个整数&#xff0c;不要填写任何多余内容 第二题 标题&#xff1a;明码 汉字的字…