C# 开发一个简单的HTTP服务器及命令行解释器

时间:2020-11-27 16:33:47


有时在做命令行程序或form程序时,会为事件的触发,考虑相应的机制,例如如果是外部条件触发时,可以有两种方式触发

1、通过TCP或UDP方式(优点是可以双工通信)

2、在服务器通过构建一个HTTP简单的服务器实现


以下简单的写下通过C#构建一个HTTP服务器,做简单的命令解析,以及开启另外一个线程,监听用户的键盘输入:


 class Program
    { 



        static void Main(string[] args)
        {


            Init();


            //启动HTTP线程服务器,用于接受HTTP的请求,并做出相应的操作;

            Thread httpThread = new Thread(new HttpListenerUtil().HTTP服务器监听);

            httpThread.Start();

            

            Thread ListenerCommInput = new Thread(ReadInputComand);

            ListenerCommInput.Start();



            //查询mongoDB里的数据();

            //DataMoveClass.迁移地区数据();

            //DataMoveClass.迁移统计表数据();

            //DataMoveClass.数据迁移();

        }




        private static void Init()
        {
            Console.WriteLine("准备迁移数据至mongodb数据库中!");
            Console.WriteLine("初始化连接aic数据库 及 mongodb数据库!");
        }

     

        /// <summary>
        /// 监听命令行的输入操作!并做出相应的反馈
        /// </summary>
        public static void ReadInputComand()
        {
            Console.WriteLine("读取命令行输入:(输入help查看命令参数!)");


            while (true)
            {


                string read = Console.ReadLine();


                if (read == "help")

                {

                    Console.WriteLine("\nhelp:\t 帮助命令");

                    Console.WriteLine("start count:\t 更新统计表");

                    Console.WriteLine("start region:\t 更新区域表");

                    Console.WriteLine("start cominfo:\t 更新企业信息表");

                    Console.WriteLine("quit:\t 退出系统");

                    Console.WriteLine("显示命令行帮助\n");

                }

                else if (read == "start count")

                {

                    Console.WriteLine("准备更新统计表!");

                    DataMoveClass.迁移统计表数据();

                }

                else if (read == "quit")

                {

                    Console.WriteLine("退出系统!");

                    Thread.Sleep(5000);

                    Environment.Exit(0);

                    return;

                }

                else if (read=="start region")

                {                    

                    Console.WriteLine("准备更新地区表!");

                    DataMoveClass.迁移地区数据();

                }

                else if (read == "start cominfo")

                {                    

                    Console.WriteLine("准备更新企业表!");

                    DataMoveClass.数据迁移();

                }

                else 

                {

                    Console.WriteLine("不识别的命令!\n输入 help查看帮助\n");

                }



            }



        }




        /// <summary>
        /// 服务器监听方法;
        /// </summary>
        public void HTTP服务器监听()
        {
            HttpListener httpListener = new HttpListener();


            httpListener.AuthenticationSchemes = AuthenticationSchemes.Anonymous;
            httpListener.Prefixes.Add( getDevice("region"));
            httpListener.Prefixes.Add( getDevice("count"));
            httpListener.Prefixes.Add( getDevice("cominfo"));//该接口用户查询设备状态 




           
            try
            {
                httpListener.Start();
            }
            catch (Exception e)
            {


                Console.WriteLine("开启http服务器失败,检查配置文件IP与本机IP是否一致:" + e.Message);
                return;
            }


             
            Console.WriteLine("HTTP服务器开始运行......");
            while (true)
            { 
                HttpListenerContext ctx = httpListener.GetContext();
                ctx.Response.StatusCode = 200;//设置返回给客服端http状态代码
                // string name = ctx.Request.QueryString["mumuid"];


                 
                StreamWriter writer = new StreamWriter(ctx.Response.OutputStream);


                string resString = "";
                try
                {
                    resString=处理分析HTTP请求的详细列表(ctx);
                }
                catch (Exception ep)
                {


                    resString = ep.Message;
                } 
                 
                writer.WriteLine(resString);
                writer.Close();
                ctx.Response.Close(); 


            }


          //  httpListener.Stop();
        }
         


}



最终的效果如下:

C#  开发一个简单的HTTP服务器及命令行解释器