本示例使用的设备:RFID网络WIFI无线TCP/UDP/HTTP可编程二次开发读卡器POE供电语音-淘宝网 (taobao.com)
服务端代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Collections;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using System.Web.Services;
using Newtonsoft.Json;public partial class HttpReader : System.Web.UI.Page
{public string RepStr = "";protected void Page_Load(object sender, EventArgs e){//Request方式:直接以对象索引的方式获取参数值,不受POST或GET方式影响。//Request.QueryString方式:在客户端使用GET方式进行提交时可以使用此方式获取。高效//Request.Form方式:在客户端使用POST方式进行提交时可以使用此方式进行获取。高效//Request.Params方式:该方式属于多种获取数据的一个集合,包括Cookie,此方式同样不受POST和GET方式影string info = "";string jihao = "";string cardtype = "";string card = "";string Data = "";string dn = "";string Status = "";Int16 cardtype16 = 0;int cardtypecode = 0;int pushortake = 0;string dispstr = "";string ChineseVoice = "[v8]"; //[v8]表示本次播报语音音量,取值范围v1 到 v16try { //GET、POST提交方式下解析获取提交的各项参数if (Request.Params["info"] != null) { info = Request.Params["info"]; } //信息序号if (Request.Params["jihao"] != null) { jihao = Request.Params["jihao"]; } //设备机号(可自编)if (Request.Params["cardtype"] != null){cardtype = Request.Params["cardtype"];} //卡类型,卡状态if (Request.Params["card"] != null) { card = Request.Params["card"]; } //卡序列号if (Request.Params["data"] != null) { Data = Request.Params["data"]; } //扇区内容if (Request.Params["dn"] != null) { dn = Request.Params["dn"]; } //设备硬件序列号,出厂时已固化,全球唯一if (Request.Params["status"] != null) { Status = Request.Params["status"]; } //读卡状态,如密码认证失败为12if (info != "" && jihao != "" && cardtype != "" && card != ""){ cardtype16 = Convert.ToInt16(cardtype, 16);pushortake = cardtype16 / 128; //pushortake=0 表示读卡,>0表示卡离开感应区cardtypecode = cardtype16 % 16; // cardtypecode=1 ID卡,2 HID卡,3 T5557卡,4 EM4305卡,5 IC卡,6 二代身份证,7 是15693卡,IClass" }else //如未获取到有效参数,使用JSON方式解析获取提交的参数{StreamReader sr = new StreamReader(Request.GetBufferlessInputStream());string response = sr.ReadToEnd();RootObject rb = JsonConvert.DeserializeObject<RootObject>(response);info = rb.info; //接收到的数据包号,需回应该包号jihao = rb.jihao; //设备机号(可自编)cardtype = rb.cardtype; //卡类型,卡状态card = rb.card; //接收到的原始16进制卡号,可根据需要自行转换成其他卡号Data = rb.data; //扇区内容dn = rb.dn; //设备硬件序列号,出厂时已固化,全球唯一Status = rb.status; //读卡状态,如密码认证失败为12if (info != "" && jihao != "" && cardtype != "" && card != ""){cardtype16 = Convert.ToInt16(cardtype, 16);pushortake = cardtype16 / 128; //pushortake=0 表示读卡,>0表示卡离开感应区cardtypecode = cardtype16 % 16; // cardtypecode=1 ID卡,2 HID卡,3 T5557卡,4 EM4305卡,5 IC卡,6 二代身份证,7 是15693卡,IClass" }}if (info != "" && card != "") //通过解析获取到了有效的参数,回应驱动读卡器显示文字、蜂鸣响声或播报语音{dispstr = "{" + getChinesecode("卡号") + ":}" + (card + " ").Substring(0, 12) + DateTime.Now.ToString("yy-MM-dd HH:mm:ss"); //显示信息,注意中文汉字一定要转换为设备能显示的编码,其它字母数字符号不需要转换,{}内的信息反白显示if (pushortake > 0){ChineseVoice = ChineseVoice + getChinesecode("卡号") + "[n1]" + card + getChinesecode("离开感应区!"); //TTS语音,注意中文汉字一定要转换为设备能识别的编码,[n1]表示数字播报方式,其它字母数字符号不需要转换 }else{ChineseVoice = ChineseVoice + getChinesecode("读取卡号") + "[n1]" + card;}RepStr = "Response=1"; //Response=1 固定前缀,我们的设备以此来检索返回信息,表示 驱动设备显示和响声RepStr = RepStr + "," + info; //提交的信息序号,一定要对应RepStr = RepStr + "," + dispstr; //读卡器上显示文字RepStr = RepStr + ",20"; //显示时长20秒RepStr = RepStr + ",2"; //蜂鸣器发声种类,取值范围0-12RepStr = RepStr + "," + ChineseVoice; //播报的TTS语音Response.Write(RepStr); //将回应信息传送到读卡器Response.End();}}catch { }}public static string getChinesecode(string inputip) //获取中文编码,显示汉字、TTS中文语音都要转换编码{byte[] Chinesecodearry = System.Text.Encoding.GetEncoding(936).GetBytes(inputip);int codelen = (byte)Chinesecodearry.Length;string hexcode = "";for (int i = 0; i < codelen; i++){if (i % 2 == 0) { hexcode = hexcode + "\\x"; }hexcode = hexcode + Chinesecodearry[i].ToString("X2");}return hexcode;}public class RootObject //json类{public string info { get; set; }public string jihao { get; set; }public string cardtype { get; set; }public string card { get; set; }public string data { get; set; }public string dn { get; set; }public string status { get; set; }}}
前端脚本 :
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="HttpReader.aspx.cs" Inherits="HttpReader" %><!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/><title>Http读卡器Demo</title>
</head><body><form id="form1" runat="server"><div style="height: 96px"></div></form>
</body>
</html>