开发日记:中控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;
        }

    }
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Unity是一款跨平台的游戏引擎,被广泛应用于游戏开发和虚拟现实(VR)、增强现实(AR)应用的开发。也可以用于开发展厅系统。 在Unity开发系统过程,需要考虑以下几方面的内容: 1. 界面设计:展厅系统的界面设计需要符合用户习惯,能够方便快速地制和操作展品,同时美观大方。 2. 数据管理:展品信息和状态需要通过数据管理模块进行统一管理,保证系统的可靠性和稳定性。 3. 操作指引:针对不同展品的操作指引应该清晰明了,能够帮助用户快速上手。 4. 系统测试:在开发过程需要进行充分的测试,确保系统稳定可用。 关于如何实现上述内容,可以参考Unity官方文档和教程,并结合实际需求进行开发。需要注意的是,在实际应用可能会面临不同的场景和需求,需要根据实际情况进行优化和调整。\ 总之,通过合理的界面设计、数据管理、操作指引和系统测试,基于Unity的展厅系统可以快速高效地实现,为用户带来更好的展品浏览和体验效果。 ### 回答2: Unity开发展厅系统是为了方便展厅制和管理而设计的一款软件系统,其教程在市面上也有很多的资源可以参考。 首先,在使用Unity开发展厅系统之前,需要先学习基本的Unity知识,并掌握相关的编程语言。特别是针对展厅制的需求,还需要了解一些数据处理和服务器通信等方面的知识。 其次,在编写展厅系统时,需要注意以下几点: 1. 界面设计:展厅系统的界面设计需要符合整体风格,易于操作,能够简明地显示相关信息,并提供灵活的交互方式。 2. 数据处理:展厅系统需要处理多种不同类型的数据,包括实时数据、历史数据、制指令等等。需要根据实际需求,设计合适的数据结构和处理算法,同时保证数据的准确性和安全性。 3. 服务器通信:展厅系统需要和服务器进行通信,获取数据或发送指令。这需要考虑网络延迟、数据传输的安全等问题,同时还需要设计合适的通信协议,保障系统的稳定运行。 最后,值得注意的是,不同展厅的系统需求可能会有所不同,因此在使用Unity开发展厅系统前,需要事先进行需求分析,并根据实际情况进行相应的定制化开发。同时,不断地进行优化和改进,以提高终端用户的体验,并确保系统的稳定性和可靠性。 ### 回答3: Unity开发展厅系统教程是一种非常有用的技能。通过掌握这种技能,开发者可以创建出各种智能化的、具有交互性的系统。下面就是这种技能的一些教程步骤。 首先,开发者需要了解如何在Unity插入模型和UI。这包括将模型导入Unity、创建UI组件等。 其次,开发者需要掌握如何将系统各个界面之间进行跳转、如何实现按钮或其他UI元素的交互功能等。 第三,了解如何通过Unity实现数据存储和读取功能。比如将某个房间的灯光状态保存到本地或数据库,并在需要时读取回来。 第四,掌握如何通过Unity的Networking库将系统和服务器进行连接,实现远程制的功能。 最后,进行测试和优化。在开发过程开发者需要不断进行测试和优化,保证系统的流畅性和稳定性。 总之,通过这些教程步骤,开发者可以轻松地掌握Unity开发展厅系统的技能,以实现智能化的、具有交互性的系统。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值