c# 简单实现Web服务器


using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;

namespace Test
{
    public class MesWebServer
    {
        private HttpListener httpListener;
        private readonly string taskName = "web_server";
        public MesWebServer()
        {
            httpListener = new HttpListener();

            SimpleListenerExample(new string[] { "http://*:80/DeviceApi/ReceiveTechProParam/" });
        }

        ~MesWebServer()
        {
            
            httpListener.Stop();
            httpListener.Close();
        }

        // This example requires the System and System.Net namespaces.
        public void SimpleListenerExample(string[] prefixes)
        {
            if (!HttpListener.IsSupported)
            {
                Console.WriteLine("Windows XP SP2 or Server 2003 is required to use the HttpListener class.");
                return;
            }
            // URI prefixes are required,
            // for example "http://contoso.com:8080/index/".
            if (prefixes == null || prefixes.Length == 0)
                throw new ArgumentException("prefixes");

            // Create a listener.
            //HttpListener listener = new HttpListener();
            // Add the prefixes.
            foreach (string s in prefixes)
            {
                httpListener.Prefixes.Add(s);
            }
            httpListener.Start();
            Console.WriteLine("Listening...");

              Task.Factory.StartNew(ContextHandle, TaskCreationOptions.LongRunning);
            //httpListener.Stop();
        }

        private void ContextHandle()
        {
            // Note: The GetContext method blocks while waiting for a request.
            HttpListenerContext context = httpListener.GetContext();
            HttpListenerRequest request = context.Request;

            //StreamReader reader = new StreamReader(request.InputStream);            // Obtain a response object.
            //var requestData = reader.ReadToEnd();

            // Construct a response.
            string responseString = "<HTML><BODY> Hello world!</BODY></HTML>";

            string path = request.Url.Segments.LastOrDefault();
            path = path.Remove(path.IndexOf('/'), 1);
            switch (path)
            {
                case "ReceiveTechProParam":
                    SaveFormula(request, ref responseString);
                    break;
                default:
                    break;
            }

            HttpListenerResponse response = context.Response;

            byte[] buffer = System.Text.Encoding.UTF8.GetBytes(responseString);
            // Get a response stream and write the response to it.
            response.ContentLength64 = buffer.Length;
            Stream output = response.OutputStream;
            output.Write(buffer, 0, buffer.Length);
            // You must close the output stream.
            output.Close();
        }

        private void SaveFormula(HttpListenerRequest request, ref string response)
        {
            ServerResponse res = new ServerResponse();
            try
            {
                StreamReader reader = new StreamReader(request.InputStream);            // Obtain a response object.
                var requestData = reader.ReadToEnd();
                reader.Close();
                reader.Dispose();

                var model = JsonConvert.DeserializeObject<ServerFormulaRequest>(requestData);

                // for (int i = 0; i < model.Data.Length; i++)
                // {
                //     IniFile.WriteString(model.Id, model.Data[i].Name, model.Data[i].Value, Def.GetAbsPathName(Def.OvenParameterCFG));
                //  }

                res.StatusCode = 0;
            }
            catch (Exception ex)
            {
                Console.WriteLine($"{request.Url.AbsoluteUri}接受请求错误,原因:{ex.Message}");
                res.StatusCode = -1;
                res.Message = $"数据格式错误:{ex.Message}";
            }
            finally
            {
                response = JsonConvert.SerializeObject(res);
            }
        }


        public class ServerRequest
        {
            [JsonProperty("process_id")]
            public string ProcessId { get; set; }

            [JsonProperty("equipment_id")]
            public string EquipmentId { get; set; }
        }

        public class ServerFormulaRequest : ServerRequest
        {
            [JsonProperty("formula_no")]
            public string Id { get; set; }       // 配方号

            [JsonProperty("product_no")]
            public string ProductNo { get; set; }

            [JsonProperty("product_name")]
            public string ProductName { get; set; }

            [JsonProperty("data")]
            public FormulaParam[] Data { get; set; }

        }

        public class FormulaParam
        {
            [JsonProperty("parameter_code")]
            public string Id { get; set; }

            [JsonProperty("parameter_name")]
            public string Name { get; set; }

            [JsonProperty("parameter_unit")]
            public string Unit { get; set; }

            [JsonProperty("parameter_upper")]
            public string Upper { get; set; }

            [JsonProperty("parameter_value")]
            public string Value { get; set; }

            [JsonProperty("parameter_lower")]
            public string Lower { get; set; }
        }

        public class ServerResponse
        {
            [JsonProperty("status_code")]
            public int StatusCode { get; set; }

            [JsonProperty("message")]
            public string Message { get; set; }
        }
    }
}

使用方式

MesWebServer mesWebServer = new MesWebServer();

注意:调试的话要用管理员方式打开VS

           运行程序也要用管理员方式打开程序


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM