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程序的更多相关文章

  1. 【转】推荐介绍几款小巧的Web Server程序

    原博地址:http://blog.csdn.net/heiyeshuwu/article/details/1753900 偶然看到几个小巧有趣的Web Server程序,觉得有必要拿来分享一下,让大家 ...

  2. 99%的程序都没有考虑的网络异常?使用Fundebug.notify()主动上报

    近日看到一篇文章99%的程序都没有考虑的网络异常,开篇提到: 绝大多数程序只考虑了接口正常工作的场景,而用户在使用我们的产品时遇到的各类异常,全都丢在看似 ok 的 try catch 中.如果没有做 ...

  3. 通达OA 同步中控考勤机 增强版

    如果你用的是中控考勤机且考勤机能联网,那恭喜有福了! 最近发现考勤机提供web方式查询,经过调试可以用程序直接读取考勤机数据跨过考勤机软件及其access数据库,数据同步及时性.可靠性大幅提高. 通达 ...

  4. asp.net URL传递中文参数System.Web.HttpUtility.UrlEncode与Server.UrlEncode的区别

    asp.net URL传递中文参数System.Web.HttpUtility.UrlEncode与Server.UrlEncode的区别(一) HttpUtility.UrlEncode 方法: 对 ...

  5. 5.智能快递柜(通信篇-Server程序)

    1.智能快递柜(开篇) 2.智能快递柜(终端篇) 3.智能快递柜(通信篇-HTTP) 4.智能快递柜(通信篇-SOCKET) 5.智能快递柜(通信篇-Server程序) 6.智能快递柜(平台篇) 7. ...

  6. Django---Http协议简述和原理,HTTP请求码,HTTP请求格式和响应格式(重点),Django的安装与使用,Django项目的创建和运行(cmd和pycharm两种模式),Django的基础文件配置,Web框架的本质,服务器程序和应用程序(wsgiref服务端模块,jinja2模板渲染模块)的使用

    Django---Http协议简述和原理,HTTP请求码,HTTP请求格式和响应格式(重点),Django的安装与使用,Django项目的创建和运行(cmd和pycharm两种模式),Django的基 ...

  7. [计算机网络]简易http server程序

    好久没输出了,知识还是要写下总结才能让思路更加清晰.最近在学习计算机网络相关的知识,来聊聊如何编写一个建议的HTTP服务器. 这个http server的实现源代码我放在了我的github上,有兴趣的 ...

  8. JDK和Tomcat环境变量,以及用MyEclipse新建Web Project测试Tomcat Server

    [请尊重原创版权,如需引用,请注明来源及地址] 在此之前一直用的Eclipse挺顺手的,今天突然想换MyEclipse试试,不知安装MyEclipse的时候我选错了什么选项,反正JDK和Tomcat的 ...

  9. 为什么在Mac中无法用k web运行ASP.NET 5程序

    k web对应的命令如下: "web": "Microsoft.AspNet.Hosting --server Microsoft.AspNet.Server.WebLi ...

随机推荐

  1. java.lang.RuntimeException: Handler (com.***.behavior.BEvent$1) {421bca80} sending message to a Hand

    java.lang.RuntimeException: Handler (com.***.behavior.BEvent$1) {421bca80} sending message to a Hand ...

  2. Android获取状态栏的高度:

    方法一: //获取手机状态栏高度 public static int getStatusBarHeight(Context context){ Class<?> c = null; Obj ...

  3. 4.bootstrap的form表单的form-group和form-control的区别与联系

    1. form-group一般用于div form-control一般用于置于div中的标签元素,为了让控件在各种表单风格中样式不出错,需要添加类名“form-control”,如: <form ...

  4. centso下如何解压RAR文件

    tar -xvf rarlinux-3.9.3.tar.gz cd rar   make 看见下面这些信息就是安装成功了 mkdir -p /usr/local/bin mkdir -p /usr/l ...

  5. C# 6.0/7.0 的新特性

    转眼C#语言都已经迭代到7.0版本了,很多小伙伴都已经把C# 7.0 的新特性应用到代码中了,想想自己连6.0的新特性都还很少使用,今天特意搜集了一下6.0和7.0的一些新特性,记录一下,方便查阅. ...

  6. Python全栈工程师(集合、函数)

     ParisGabriel     感谢 大家的支持  你们的阅读评价就是我最好的动力  我会坚持把排版内容以及偶尔的错误做的越来越好        每天坚持 一天一篇 点个订阅吧  灰常感谢    ...

  7. 使用ADO.NET 实体数据模型连接MySql

    原文:使用ADO.NET 实体数据模型连接MySql 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/a123_z/article/details/8 ...

  8. SQLAlchemy技术文档(中文版)(中)

    10.建立联系(外键) 是时候考虑怎样映射和查询一个和Users表关联的第二张表了.假设我们系统的用户可以存储任意数量的email地址.我们需要定义一个新表Address与User相关联. from ...

  9. [bzoj] 1085 骑士精神 || ID-DFS

    原题 找到最少的步数成为目标状态. IDDFS(限制层数的dfs)即可 #include<cstdio> #include<algorithm> using namespace ...

  10. CF992E Nastya and King-Shamans 解题报告

    CF992E Nastya and King-Shamans 题意翻译 给定一个序列 \(a_i\),记其前缀和序列为 \(s_i\),有 \(q\) 个询问,每次单点修改,询问是否存在一个 \(i\ ...