HTTP服务器开发教程

article/2025/9/18 14:07:30

<![CDATA[

概述

最近因为项目需要,必须自己实现一个HTTP服务器的部分功能。

需求大概是这样的,winform里使用webrowser控件显示一个本地的html页面,同时winform启动http服务,本地html页面里通过javascript使用XMLHttpRequest对象向winform进行http通信,交互数据。

现在,该项目功能基本实现了,把HTTP服务器部分提取出来分享一下,并提供相关源码下载。

HTTP服务器开发教程

启动HTTP服务器代码,创建Socket侦听端口

        public void Start(string ip = "127.0.0.1", int port = 80)

        {

            _IP = ip;

            _Port = port;

            Stop();

            _Listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

            IPAddress ipaddress = IPAddress.Parse(_IP);

            IPEndPoint endpoint = new IPEndPoint(ipaddress, _Port);

            _Listener.Bind(endpoint);

            _Listener.Listen(int.MaxValue);

            _Thread = new Thread(new ThreadStart(ThreadHandler));

            _Thread.Start();

        }

开启一个线程,接收请求的Socket,并且用HttpRequest对象封装处理请求的Socket

        private void ThreadHandler()

        {

            while (true)

            {

                Socket s = _Listener.Accept();

                HttpRequest request = new HttpRequest(this, s);

                request.Start();

            }

        }

每个HttpRequest开启一个新线程处理Socket的发送和接收

        public void Start()

        {

            _Thread = new Thread(new ThreadStart(ThreadHandler));

            _Thread.Start();

        }

 

        private void ThreadHandler()

        {

            if (_Server.TraceInConsole)

                Console.WriteLine("Begin HttpRequest...");

            try

            {

                while (true)

                {

                    string receive = Receive();

                    if (!string.IsNullOrEmpty(receive))

                    {

                        _Server.ReadRequest(this, receive);

 

                        string response = _Server.GetResponse(this);

                        int write = Send(response);

 

                        _Server.ResponseFinished(this);

 

                        while (true)

                        {

                            Thread.Sleep(3000);

                            write = Send(HttpServer.BYTES_CRLF);

                            if (_Client == null)

                                break;

                        }

                    }

                    if (_Client == null)

                        break;

                    Thread.Sleep(1000);

                }

            }

            catch (Exception ex)

            {

                if (_Server.TraceInConsole)

                    Console.WriteLine(ex.Message);

            }

            if (_Server.TraceInConsole)

                Console.WriteLine("End HttpRequest...");

        }

处理HTTP请求,默认是返回http404错误,在GetResponse添加自定义http处理

        public virtual string GetResponse(HttpRequest request)

        {

 

            return ResponeNotFound(request.Version);

        }

        public string ResponeNotFound(string version)

        {

            return version + @" 404 Not Found

Content-Length: 0

Content-Type: text/plain

Server: Hunk's http server

Date: Fri, 06 Aug 2010 14:00:23 GMT

 

";

        }

处理Socket关闭,TIME_WAIT状态

如果服务端的Socket比客户端的Socket先关闭,会导致客户端出现TIME_WAIT状态,占用系统资源。

服务端尝试发送数据,利用SocketExeception判断客户端Socket是否已关闭连接,然后关闭服务端Socket。

            while (true)

            {

                Thread.Sleep(3000);

                write = Send(HttpServer.BYTES_CRLF); //如果发送失败,_Client会被关闭并且设置为null

                if (_Server.TraceInConsole)

                    Console.WriteLine("Try To End HttpRequest...");

                if (_Client == null)

                    break;

            }

注:只提点主要的位置,详细请下载源码。

HTTP服务器和客户端的效果图

源码下载地址

http://download.csdn.net/source/2602863

 

]]>


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

相关文章

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;明码 汉字的字…

(求救大佬)蓝桥杯C语言试题 算法训练 C++ CH08 01

题目&#xff1a; 求解我的代码有什么问题&#xff0c;为什么不能通过蓝桥的编译&#xff0c;但运行结果都正确。 我的代码&#xff1a; #include<stdio.h> int main() { double ssh,zrf,y,x,g,f; int a,b,c,d,t,x1,x2,x3,x4,q; int i,j; scanf("%d%d%d%d",&a…

蓝桥杯训练题C语言

开学后就很少抽空写写题了&#xff0c;所以这次只有几道题目和大家分享一下了。 有些真题也有些VIP基础题&#xff0c;想和大家分享一下。&#xff08;有些是仿的其他博主的代码&#xff0c;&#xff0c;&#xff0c;&#xff0c;因为有些确实难&#xff08;呜呜呜~&#xff0…