中控考勤机WEB主动上报接收SERVER程序
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 = ;
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 = ;//设置返回给客服端http状态代码
var sn = ctx.Request.QueryString["SN"];
var httpMethod=ctx.Request.HttpMethod;
var table = ctx.Request.QueryString["table"];
var count = ; 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[];
var userName = "未知人员";
if (userId == "")
{
userName = "黄海";
}
if (userId == "")
{
userName = "吴缤";
}
if (userId == "")
{
userName = "申健";
} if (userId == "")
{
userName = "周枫";
} Console.WriteLine(userName + " " + array[]);
} //使用Writer输出http响应代码
using (var writer = new StreamWriter(ctx.Response.OutputStream))
{
ctx.Response.ContentType = ctx.Request.AcceptTypes[];
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: "+(+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 = ;
if (!request.HasEntityBody)
{
return null;
}
var returnStr = ""; using (var body = request.InputStream)
{
using (var reader = new StreamReader(body, request.ContentEncoding))
{
while (reader.Peek() >= )
{
var nowString = (char) reader.Read();
if (nowString.ToString() == "\n")
{
Count++;
}
returnStr = returnStr+ nowString;
}
}
}
return returnStr;
} }
}
中控考勤机WEB主动上报接收SERVER程序的更多相关文章
- 【转】推荐介绍几款小巧的Web Server程序
原博地址:http://blog.csdn.net/heiyeshuwu/article/details/1753900 偶然看到几个小巧有趣的Web Server程序,觉得有必要拿来分享一下,让大家 ...
- 99%的程序都没有考虑的网络异常?使用Fundebug.notify()主动上报
近日看到一篇文章99%的程序都没有考虑的网络异常,开篇提到: 绝大多数程序只考虑了接口正常工作的场景,而用户在使用我们的产品时遇到的各类异常,全都丢在看似 ok 的 try catch 中.如果没有做 ...
- 通达OA 同步中控考勤机 增强版
如果你用的是中控考勤机且考勤机能联网,那恭喜有福了! 最近发现考勤机提供web方式查询,经过调试可以用程序直接读取考勤机数据跨过考勤机软件及其access数据库,数据同步及时性.可靠性大幅提高. 通达 ...
- asp.net URL传递中文参数System.Web.HttpUtility.UrlEncode与Server.UrlEncode的区别
asp.net URL传递中文参数System.Web.HttpUtility.UrlEncode与Server.UrlEncode的区别(一) HttpUtility.UrlEncode 方法: 对 ...
- 5.智能快递柜(通信篇-Server程序)
1.智能快递柜(开篇) 2.智能快递柜(终端篇) 3.智能快递柜(通信篇-HTTP) 4.智能快递柜(通信篇-SOCKET) 5.智能快递柜(通信篇-Server程序) 6.智能快递柜(平台篇) 7. ...
- Django---Http协议简述和原理,HTTP请求码,HTTP请求格式和响应格式(重点),Django的安装与使用,Django项目的创建和运行(cmd和pycharm两种模式),Django的基础文件配置,Web框架的本质,服务器程序和应用程序(wsgiref服务端模块,jinja2模板渲染模块)的使用
Django---Http协议简述和原理,HTTP请求码,HTTP请求格式和响应格式(重点),Django的安装与使用,Django项目的创建和运行(cmd和pycharm两种模式),Django的基 ...
- [计算机网络]简易http server程序
好久没输出了,知识还是要写下总结才能让思路更加清晰.最近在学习计算机网络相关的知识,来聊聊如何编写一个建议的HTTP服务器. 这个http server的实现源代码我放在了我的github上,有兴趣的 ...
- JDK和Tomcat环境变量,以及用MyEclipse新建Web Project测试Tomcat Server
[请尊重原创版权,如需引用,请注明来源及地址] 在此之前一直用的Eclipse挺顺手的,今天突然想换MyEclipse试试,不知安装MyEclipse的时候我选错了什么选项,反正JDK和Tomcat的 ...
- 为什么在Mac中无法用k web运行ASP.NET 5程序
k web对应的命令如下: "web": "Microsoft.AspNet.Hosting --server Microsoft.AspNet.Server.WebLi ...
随机推荐
- 如何将多个Eclipse项目导入IntelliJ IDEA
技术交流群:233513714 IntelliJ IDEA 与Eclipse在新建项目上的叫法略有不同,区别见下图. 当我们使用idea后再次使用eclipse时就会有很多不适,下面介绍一个多项目的导 ...
- 用(bootstrap)Handsontable做表格,手动实现数据排序
商品graph帐票时,用(bootstrap)Handsontable做表格,手动实现数据排序待解决的问题: 若使用控件本身的排序,必须指定colHead,colHead不能被copy,若想表头被co ...
- eclipse、myeclipse 反编译插件 轻松查看源代码
java反编译插件:Eclipse Class Decompiler,能够很方便的使用本插件查看类库源码,以及采用本插件进行Debug调试. eclipse中安装Eclipse Class Decom ...
- lintcode
public class Solution { /** * @param s: The first string * @param b: The second string * @return tru ...
- 剑指Offer - 九度1509 - 树中两个结点的最低公共祖先
剑指Offer - 九度1509 - 树中两个结点的最低公共祖先2014-02-07 01:04 题目描述: 给定一棵树,同时给出树中的两个结点,求它们的最低公共祖先. 输入: 输入可能包含多个测试样 ...
- 【Merge Intervals】cpp
题目: Given a collection of intervals, merge all overlapping intervals. For example,Given [1,3],[2,6], ...
- 《移动App性能评测与优化》读书笔记
第一章:内存 内存的主要组成索引: Native Heap:Native代码分配的内存,虚拟机和Android框架本身也会分配 Dalvik Heap:Java代码分配的对象 Dalvik Oth ...
- Python全栈工程师(迭代器、字节串)
ParisGabriel 每天坚持手写 一天一篇 决定坚持几年 为了梦想为了信仰 Python人工智能从入门到精通 迭代器 Iterator: 用<&g ...
- [18/12/3]蓝桥杯 练习系统 入门级别 Fibonacci数列求模问题 题解思路
前言略. 看到这个题目本来应该很高兴的,因为什么,因为太TM的基础了啊! 可是当你用常规方法尝试提交OJ时你会发现..hhh...运行超时..(开心地摇起了呆毛 //Fibonacci数列递归一般问题 ...
- vmware中三种网络连接方式(复制)
原文来自http://note.youdao.com/share/web/file.html?id=236896997b6ffbaa8e0d92eacd13abbf&type=note 我怕链 ...