开发日记:中控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; } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?