开发日记:中控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;
} }
}
开发日记:中控PUSH协议的更多相关文章
- 微信小程序开发日记——高仿知乎日报(中)
本人对知乎日报是情有独钟,看我的博客和github就知道了,写了几个不同技术类型的知乎日报APP要做微信小程序首先要对html,css,js有一定的基础,还有对微信小程序的API也要非常熟悉 我将该教 ...
- 嵌入式Linux驱动开发日记
嵌入式Linux驱动开发日记 主机硬件环境 开发机:虚拟机Ubuntu12.04 内存: 1G 硬盘:80GB 目标板硬件环境 CPU: SP5V210 (开发板:QT210) SDRAM: 512M ...
- 【Android开发日记】之入门篇(十三)——Android的控件解析
Android的控件都派生自android.view.View类,在android.widget包中定义了大量的系统控件供开发者使用,开发者也可以从View类及其子类中,派生出自定义的控件. 一.An ...
- 【Android开发日记】之入门篇(十一)——Android的Intent机制
继续我们的Android之路吧.今天我要介绍的是Android的Intent. 对于基于组件的应用开发而言,不仅需要构造和寻找符合需求的组件,更重要的是要将组件有机的连接起来,互联互通交换信息,才能够 ...
- iOS开发人员程序许可协议
请细致阅读以下的许可协议条款和条件之前下载或使用苹果软件. 这些条款和条件构成你和苹果之间的法律协议. iOS开发人员程序许可协议 目的 你想使用苹果软件(例如以下定义)来开发一个或多个应 ...
- 微信小程序开发日记——高仿知乎日报(上)
本人对知乎日报是情有独钟,看我的博客和github就知道了,写了几个不同技术类型的知乎日报APP 要做微信小程序首先要对html,css,js有一定的基础,还有对微信小程序的API也要非常熟悉 我将该 ...
- iOS开发网络篇—HTTP协议
iOS开发网络篇—HTTP协议 说明:apache tomcat服务器必须占用8080端口 一.URL 1.基本介绍 URL的全称是Uniform Resource Locator(统一资源定位符) ...
- 02.iOS开发网络篇—HTTP协议
iOS开发网络篇—HTTP协议 说明:apache tomcat服务器必须占用8080端口 一.URL 1.基本介绍 URL的全称是Uniform Resource Locator(统一资源定位符) ...
- 【原创】shadowebdict开发日记:基于linux的简明英汉字典(四)
全系列目录: [原创]shadowebdict开发日记:基于linux的简明英汉字典(一) [原创]shadowebdict开发日记:基于linux的简明英汉字典(二) [原创]shadowebdic ...
- 【原创】shadowebdict开发日记:基于linux的简明英汉字典(三)
全系列目录: [原创]shadowebdict开发日记:基于linux的简明英汉字典(一) [原创]shadowebdict开发日记:基于linux的简明英汉字典(二) [原创]shadowebdic ...
随机推荐
- echarts中实现多个label
先来个效果图 如果你刚好需要实现这种效果,那么可以瞅一瞅了 我要开始水文了 如图所示,图中顶部部分文字乍一看好像是独立于柱状图,显示在最顶上,其实它也是由柱状图模拟而成. 只是吧图形相关属性做了隐藏, ...
- OpenCvSharp inputs[0].size[1] % blobs[0].size[1] == 0
报错代码如图 详细错误 未处理 OpenCvSharp.OpenCVException HResult=-2146233088 Message=inputs[0].size[1] % blobs[0] ...
- copy 导入包含特殊符号的文本
客户提供了一份数据记录需要导入数据库,但是文本中有一个列的内容是反斜杠"\" ,因为""是特殊的转义字符,需要使用两个"\"才能表示,如果直 ...
- java实战字符串+栈5:解码字符
题目: 有形如 (重复字符串)<重复次数n> 的片段,解码后相当于n个重复字符串连续拼接在一起,求展开后的字符串. 求解: public static String zipString( ...
- archlinux调整分区及btrfs文件系统大小
1.防止数据丢失 有重要数据要先备份 最好现在虚拟机练习一下, 2.注意点 修改分区的初始位置似乎需要删除分区后重建分区,意味着分区数据全被删除. 所以修改分区初始位置可能需要其它办法 修改分区的初始 ...
- NOI Linux 2.0 下载安装和使用
下载安装部分 NOI Linux 2.0发布,将于9月1日起正式启用! 首先来到 NOI 的官网,下载 .iso 格式的盘符. 然后下载任意一个虚拟机软件,这里以 VirtualBox 为例. Dow ...
- HashSet 存对象的时候是如何判断是不是同一个对象,其中含有重写equals方法和hashcode方法 后续
一开始,set集合里面只存进一个对象, 存第二个对象时候,由于重写了hashcode方法,只要价格都是10就返回1,所以hashcode一样的话,再去进行equals方法判断,此时这个也重写了,thi ...
- OpenHarmony Meetup 2023 广州站圆满举办,城市巡回全面启航
"OpenHarmony正当时--技术开源"OpenHarmony Meetup 2023城市巡回活动,旨在通过meetup线下交流形式,解读OpenHarmony作为下一代智 ...
- 80+产品正通过兼容性测试,OpenHarmony生态蓬勃发展
4 月 25 日,开放原子开源基金会举办了 OpenAtom OpenHarmony(以下简称"OpenHarmony")技术日活动,OpenHarmony PMC 委员代表首次对 ...
- 全面的开发者文档和用户目标解析:API 文档指南和开发者旅程
开发者文档 开发者文档,也称为 API 文档,是一种专门针对软件开发人员的技术写作形式.这种类型的文档通常包括 API 的技术规范.代码注释.软件设计和架构以及软件开发中涉及的其他详细技术描述.开发者 ...