Go to my github

开发日记:中控PUSH协议

using System;
using System.IO;
using System.Net;
using System.Text.RegularExpressions;

namespace ConsoleApplication3
{
    class Program
    {
        static void Main(string[] args)
        {
            using (var listerner = new HttpListener())
            {
                listerner.AuthenticationSchemes = AuthenticationSchemes.Anonymous;
                var ipEntry = Dns.GetHostEntry(Dns.GetHostName());
                var ipList = ipEntry.AddressList;
                const int port = 8088;
                foreach (var ip in ipList)
                {
                    if (IsCorrenctIp(ip.ToString()))
                    {
                        listerner.Prefixes.Add("http://" + ip + ":"+ port + "/iclock/");
                    }
                }
                listerner.Prefixes.Add("http://127.0.0.1:"+ port + "/iclock/");
                listerner.Prefixes.Add("http://localhost:"+ port + "/iclock/");

                listerner.Start();

                Console.WriteLine("【系统提示】考勤管理系统启动成功!");
                while (true)
                {
                    //等待请求连接
                    //没有请求则GetContext处于阻塞状态
                    var ctx = listerner.GetContext();
                    ctx.Response.StatusCode = 200;//设置返回给客服端http状态代码
                    var sn = ctx.Request.QueryString["SN"];
                    var httpMethod=ctx.Request.HttpMethod;
                    var table = ctx.Request.QueryString["table"];
                    var count = 1;

                    if ((sn != null) &&(table!=null)&&table== "ATTLOG"&&(httpMethod=="POST"))
                    {
                        Console.WriteLine("设备号:"+sn);
                        
                        var result = GetRequestPostData(ctx.Request, out count);
                        var array = result.Split('\t');
                        var userId = array[0];
                        var userName = "未知人员";
                        if (userId == "1")
                        {
                            userName = "黄海";
                        }
                        if (userId == "2")
                        {
                            userName = "吴缤";
                        }
                        if (userId == "3")
                        {
                            userName = "申健";
                        }

                        if (userId == "197710110")
                        {
                            userName = "周枫";
                        }

                        Console.WriteLine(userName + "    " + array[1]);
                    }
                   
                    //使用Writer输出http响应代码
                    using (var writer = new StreamWriter(ctx.Response.OutputStream))
                    {
                        ctx.Response.ContentType = ctx.Request.AcceptTypes[0];
                        writer.WriteLine("HTTP/1.1 200 OK"+"<br>");
                        writer.WriteLine("Server: DsidealSuperServer/1.9.0" + "<br>");
                        writer.WriteLine(DateTime.Now.ToString("r") + "<br>");
                        writer.WriteLine("Content-Type: text/plain" + "<br>");
                        writer.WriteLine("Connection: close" + "<br>");
                        writer.WriteLine("Content-Length: "+(3+count.ToString().Length)+ "<br>");
                        writer.WriteLine("Pragma: no-cache" + "<br>");
                        writer.WriteLine("Cache-Control: no-store" + "<br>");
                        writer.WriteLine("" + "<br>");
                        writer.WriteLine("OK:"+ count + "<br>");
                        writer.Close();
                        ctx.Response.Close();
                    }
                }
            }
        }
       
        public static bool IsCorrenctIp(string ip)
        {
            var pattrn = @"(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])";
            return Regex.IsMatch(ip, pattrn);
        }
        public static string GetRequestPostData(HttpListenerRequest request,out int Count)
        {
            Count = 0;
            if (!request.HasEntityBody)
            {
                return null;
            }
            var returnStr = "";
          
            using (var body = request.InputStream)
            {
                using (var reader = new StreamReader(body, request.ContentEncoding))
                {
                    while (reader.Peek() >= 0)
                    {
                        var nowString = (char) reader.Read();
                        if (nowString.ToString() == "\n")
                        {
                            Count++;
                        }
                        returnStr = returnStr+ nowString;
                    }
                }
            }
            return returnStr;
        }

    }
}

 

posted @ 2020-01-03 10:23  峡谷少爷  阅读(1843)  评论(1编辑  收藏  举报