中控考勤机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 ...
随机推荐
- 快速登录机器&数据库
本文来自网易云社区. 作者:盛国存 背景 我们日常在使用ApiDoc维护管理api文档,提高了api文档的整体维护性.但在老旧接口中,补充接口注解无疑是一次繁重的体力劳动.仔细查看,大多数接口的格式 ...
- FTP使用心得
1、创建文件夹的函数,一次只能创建一层。 2、没有现成的判断文件夹是否存在的函数,如果文件夹不存在就创建,会报异常。有以下封装好的函数。可以直接调用。 1 2 3 4 5 6 7 8 9 10 11 ...
- python学习笔记一:数据类型
一.Python文件类型 1.源代码 hello.py: 1 #!/usr/bin/python 2 print "hello world" 2.字节代码:python源文件经编译 ...
- (整)Unreal渲染模块 框总览
@author: 黑袍小道 随缘查看 说明 由于搬山的渲染这部分担心自己理解错误,故而搬移官方下,后面整个完成再反过来更新 (这当且仅当做Unreal的帮助文档). 图形编程 模块 渲 ...
- django QuerySet 的常用API
为了加深对queryset对象api的了解,我们建立了以下示例模型: from django.db import models class Author(models.Model): "&q ...
- HDU 3336 Count the string ( KMP next函数的应用 + DP )
dp[i]代表前i个字符组成的串中所有前缀出现的次数. dp[i] = dp[next[i]] + 1; 因为next函数的含义是str[1]~str[ next[i] ]等于str[ len-nex ...
- [转载]GCC 编译使用动态链接库和静态链接库--及先后顺序----及环境变量设置总结
来自http://blog.csdn.net/benpaobagzb/article/details/51364005 GCC 编译使用动态链接库和静态链接库 1 库的分类 根据链接时期的不同,库又有 ...
- redis cluster管理工具redis-trib.rb详解
redis cluster管理工具redis-trib.rb详解 来源 http://weizijun.cn/2016/01/08/redis%20cluster%E7%AE%A1%E7%90%86% ...
- [hdu6432]Problem G. Cyclic
题目大意:给你$n$,一种合法的排列为,排列中没有$s[i\%n+1]-s[i]==1$,求合法方案数 题解:容斥,令$f_{i,j}$表示有$i$个元素,至少包含$j$个$s[i\%n+1]-s[i ...
- Tomcat学习笔记(十二)
Host和Engine容器 Context容器的父容器通常是Host容器. Engine容器表示Catalina的整个servlet引擎.如果使用Engine容器,那么它总是处于容器层级的最顶层.默认 ...