3分钟搞定一个简单的HTTP服务器

先上代码

[C#] 

?

001

002

003

004

005

006

007

008

009

010

011

012

013

014

015

016

017

018

019

020

021

022

023

024

025

026

027

028

029

030

031

032

033

034

035

036

037

038

039

040

041

042

043

044

045

046

047

048

049

050

051

052

053

054

055

056

057

058

059

060

061

062

063

064

065

066

067

068

069

070

071

072

073

074

075

076

077

078

079

080

081

082

083

084

085

086

087

088

089

090

091

092

093

094

095

096

097

098

099

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

using MySql.Data.MySqlClient;

using System;

using System.Collections.Generic;

using System.Data;

using System.Data.SqlClient;

using System.IO;

using System.Linq;

using System.Net;

using System.Text;

using System.Threading.Tasks;

namespace 异步http

{

    class Program

    {

        static HttpListener sSocket = null;

        static MySqlConnection mycon;

        static string host = "localhost";

        static string database = "test";

        static string id = "root";

        static string pwd = "qq001255552";

        static void Main(string[] args)

        {

            SetConsoleCtrlHandler(cancelHandler, true);

            sSocket = new HttpListener();

            sSocket.Prefixes.Add("http://*:7788/");

            sSocket.Start();

            string constr = string.Format("Server = {0};port={4};Database = {1}; User ID = {2}; Password = {3};", host, database, id, pwd,"3306");

            mycon = new MySqlConnection(constr);

            mycon.Open();

            sSocket.BeginGetContext(new AsyncCallback(GetContextCallBack), sSocket);

            Console.Read();

        }

        static void GetContextCallBack(IAsyncResult ar)

        {

            try

            {

                sSocket = ar.AsyncState as HttpListener;

                HttpListenerContext context = sSocket.EndGetContext(ar);

                sSocket.BeginGetContext(new AsyncCallback(GetContextCallBack), sSocket);

                HttpListenerRequest request = context.Request;

                HttpListenerResponse response = context.Response;

                Stream strem = request.InputStream;

                StreamReader reader = new StreamReader(strem,Encoding.UTF8);

                 

                string sql = reader.ReadToEnd();

                sql = System.Web.HttpUtility.UrlDecode(sql);

                reader.Close();

                strem.Close();

                sql = sql.Split(‘=‘)[1];

                Console.WriteLine( "内容:" + sql);

                switch (sql.Split(‘=‘)[0])

                {

                    case "update":

                        break;

                    case "selete":

                        break;

                    default:

                        break;

                }

                MySqlDataAdapter adptr = new MySqlDataAdapter(sql,mycon);//Adepter对象

                DataSet ds = new DataSet();//DataSet对象

                adptr.Fill(ds, "name");//填充DataSet 并为当前表命名

                DataTable rdr = ds.Tables[0];

                string send = "{";

                foreach (DataRow item in rdr.Rows)

                {

                    foreach (DataColumn t in rdr.Columns)

                    {

                        send += item[t]+":";

                    }

                    send += ",";

                }

                 send += "}";

                byte[] buffer = Encoding.UTF8.GetBytes("你好,我是大罗,你查询结果是——" + send);

                response.ContentLength64 = buffer.Length;

                Stream output = response.OutputStream;

                output.Write(buffer, 0, buffer.Length);

                output.Close();

                response.Close();

            }

            catch (Exception e)

            {

                Console.WriteLine(e.Message);

            }

        }

        #region 关闭方法

        public delegate bool ControlCtrlDelegate(int CtrlType);

        [System.Runtime.InteropServices.DllImport("kernel32.dll")]

        private static extern bool SetConsoleCtrlHandler(ControlCtrlDelegate HandlerRoutine, bool Add);

        private static ControlCtrlDelegate cancelHandler = new ControlCtrlDelegate(HandlerRoutine);

        public static bool HandlerRoutine(int CtrlType)

        {

            switch (CtrlType)

            {

                case 0:

                    Console.WriteLine("0工具被强制关闭"); //Ctrl+C关闭 

                    sSocket.Close();

                    break;

                case 2:

                    Console.WriteLine("2工具被强制关闭");//按控制台关闭按钮关闭 

                    sSocket.Close();

                    break;

            }

            Console.ReadLine();

            return false;

        }

    }

    #endregion

}

  奥,首先你需要用VS新建一个 控制台应用程序 然后 copy 然后 run
还有。。。 你需要装上个 数据库  推荐使用mysql
访问服务器的话 直接使用 unity的WWW的form表单就行  

这玩意性能还不错 瞬间并发来个几千没问题  在大就没测试过了 一般小游戏搞个排行榜  登陆验证什么的 也没多少并发,稳定性也没啥问题 巨硬都封装好了(我对巨硬还是挺看好的)
   有问题追问哈

时间: 2024-10-13 22:51:38

3分钟搞定一个简单的HTTP服务器的相关文章

软帝学院:java开发程序很难吗?学会这十步,5分钟搞定一个程序

大致分为两部分第一部分一.要把实际问题提取为数学问题(相当于数学中的建模→抽象问题具体化);二.把其分解为若干个小的函数,并明白每个小函数怎样实现其功能,同时注意功能函数与主函数间的数据交互问题;三.作出流程图,整体把握,从而为软件构建良好的结构,但也应该注意其细节问题;四.优化其算法(强调数学能力),并结合其算法选择恰当的数据结构,算法和数据结构是软件的灵魂;五.编译软件,在编译时要养成良好的书写习惯,增强其可读性;六.调试软件,可以函数为单元进行纠错.注意:你的思路不清晰,写出来的东西没有目

一篇文章搞懂DataSet、DataFrame、RDD-《每日五分钟搞定大数据》

1. 三者共性: 1.RDD.DataFrame.Dataset全都是spark平台下的分布式弹性数据集,为处理超大型数据提供便利 2.三者都有惰性机制,执行trainform操作时不会立即执行,遇到Action才会执行 3.三者都会根据spark的内存情况自动缓存运算,这样即使数据量很大,也不用担心会内存溢出 4.三者都有partition的概念,如 var predata=data.repartition(24).mapPartitions{       PartLine => {     

zookeeper-非常重要的zab协议-《每日五分钟搞定大数据》

上篇文章paxos与一致性说到zab是在paxos的基础上做了重要的改造,解决了一系列的问题,这一篇我们就来说下这个zab. zab协议的全称是ZooKeeper Atomic Broadcast即zookeeper"原子""广播"协议.它规定了两种模式:崩溃恢复和消息广播 恢复模式 什么时候进入? 当整个服务框架在启动过程中 当Leader服务器出现网络中断崩溃退出与重启等异常情况 当有新的服务器加入到集群中且集群处于正常状态(广播模式),新服会与leader进行

Spring Boot 返回 XML 数据,一分钟搞定!

Spring Boot 返回 XML 数据,前提必须已经搭建了 Spring Boot 项目,所以这一块代码就不贴了,可以点击查看之前分享的 Spring Boot 返回 JSON 数据,一分钟搞定!. 你所需具备的基础 什么是 Spring Boot? Spring Boot 核心配置文件详解 Spring Boot 开启的 2 种方式 Spring Boot 自动配置原理.实战 Spring Boot 2.x 启动全过程源码分析 更多请在Java技术栈微信公众号后台回复关键字:boot. 如

一分钟搞定AlloyTouch图片轮播

一分钟搞定AlloyTouch图片轮播 轮播图也涉及到触摸和触摸反馈,同时,AlloyTouch可以把惯性运动打开或者关闭,并且设置min和max为运动区域,超出会自动回弹.除了一般的竖向滚动,AlloyTouch也可以支持横向滚动,甚至任何属性的运动,因为它的设计的本质就是属性无关,触摸可以反馈到任何属性的运动.所以AlloyTouch制作各种各样的轮播组件还是得心应手. 第一种轮播图如上图所示.下面开始实现的过程. 第0秒 <div id="carousel-container&quo

HDFS-异常大全-《每日五分钟搞定大数据》

点击看<每日五分钟搞定大数据>完整思维导图以及所有文章目录 问题1:Decomminssioning退役datanode(即删除节点) 1.配置exclude: <name>dfs.hosts.exclude</name> <value>/data/hadoop/excludes</value> 在/data/hadoop/excludes文件添加要退役的节点ip(可同时退役多个,一个一行) 2.配置完后刷新节点 # $HADOOP_HOME/b

在vue中使用基于d3为基础的dagre-d3.js搞定一个流程图组件

项目中想搞定一个流程图,开始使用了阿里的G6,但是G6目前不支持手势,这样就很郁闷了,因为公司的领导都是使用iPad看的,你不支持手势是不行的,后来又想到了百度的echarts,试了试,感觉还不错,手机端也是没问题的,但是用起来不是很好用,每个节点的位置还要自己去设置计算有点麻烦,所以想找个在支持pc和wap并且使用方便的,结果找到了dagre-d3.js,完全满足我的需求啊,就是文档不全,还大多数都是英文.搞完之后觉得有必要记录一下,哈哈哈. 首先避免不了的就是下载,既然是基于d3的肯定是要连

c#.net快学系列一之30分钟搞定代码生成

哇咔咔,离上次写文又有几个月了.不过上次写的<这些开源项目,你都知道吗?(持续更新中...)[原创]>受到广大读者的赞赏和推荐,也使得自己更有动力去写技术文章.好了,废话不多说,直接切入正题. 前方高能预警,由于此篇博文适合初学者入门或者各种大牛老男孩怀念那些年我们一起写过的代码生成器,所以请各路时间宝贵的大神慎重查看此篇博文,误入者后果自负!!! 一.前言背景(3分钟) 博主清晰的记得,大三的时候,老师会布置各种课外作业,不过大多是基于数据库增删改查的XX管理系统.此类系统,想必大家伙都懂,

TCP学习之建立一个简单的客户/服务器系统--回射系统

TCP学习之建立一个简单的客户/服务器系统--回射系统 相关的资料可以参考Unix网络编程,这个只是修改版,不需要依赖任何文件,可以独立编译通过,而且是在两台不同的主机上进行的. fggets和fputs这两个函数来自标准I/O函数库,writen和readline见my_unp.h头文件 //my_unp.h #include<stdarg.h> #include<syslog.h> #include<stdio.h> #include<netinet/in.h