C# .aspx网页获取RFID读卡器HTTP协议提交的访问文件Request获得卡号、机号,Response回应驱动读卡器显示响声

 

本示例使用的设备: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 heartbeattype = "";
        string scantype = "";
        string card = "";
        string data = "";
        string input = "";
        string output = "";
        string rand = "";
        string dn = "";
        string status = "";
        

        Int16 cardtype16 = 0;
        int cardtypecode = 0;
        int pushortake = 0;
        string dispstr = "";
        string ChineseVoice = "[v8]";    //[v8]表示本次播报语音音量,取值范围v1 到 v16

        try             
        {   //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["heartbeattype"] != null) { heartbeattype = Request.Params["heartbeattype"]; }     //心跳包标志   
            if (Request.Params["scantype"] != null) { scantype = Request.Params["scantype"]; }                    //扫码标志   
            if (Request.Params["card"] != null) { card = Request.Params["card"]; }                                //卡序列号
            if (Request.Params["data"] != null) { data = Request.Params["data"]; }                                //扇区内容  或 扫码信息
            if (Request.Params["input"] != null) { input = Request.Params["input"]; }                             //输入标识
            if (Request.Params["output"] != null) { output = Request.Params["output"]; }                          //输出标识
            if (Request.Params["rand"] != null) { rand = Request.Params["rand"]; }                                //设备随机数
            if (Request.Params["dn"] != null) { dn = Request.Params["dn"]; }                                      //设备硬件序列号,出厂时已固化,全球唯一
            if (Request.Params["status"] != null) { status = Request.Params["status"]; }                          //读卡状态,如密码认证失败为12

            if (info == "" && jihao == "" && dn == "")    //如果未接收到有效的Request信息,再尝试用Json解析是否有Request信息
            {
                StreamReader sr = new StreamReader(Request.GetBufferlessInputStream());
                string response = sr.ReadToEnd();

                info = getjsonval(response, "info");                    //接收到的数据包号,需回应该包号
                jihao = getjsonval(response, "jihao");                  //设备机号(可自编)
                cardtype = getjsonval(response, "cardtype");            //刷卡标志,卡类型
                scantype = getjsonval(response, "scantype");            //扫码标志
                heartbeattype = getjsonval(response, "heartbeattype");  //心跳包标志   
                card = getjsonval(response, "card");                    //接收到的原始16进制卡号,可根据需要自行转换成其他卡号
                data = getjsonval(response, "data");                    //扇区内容 或 扫码信息              
                input = getjsonval(response, "input");                  //输入标识
                output = getjsonval(response, "output");                //输出标识         
                rand = getjsonval(response, "rand");                    //设备随机数
                dn = getjsonval(response, "dn");                        //设备硬件序列号,出厂时已固化,全球唯一
                status = getjsonval(response, "status");                //读卡状态,如12表示卡密码认证失败       
            }

            if (heartbeattype == "1" && dn != "" && info != "") //接收到的Request信息是 心跳包
            {
                string RepStr = "Response=1";             //Response=1 固定前缀,我们的设备以此来检索返回信息,
                RepStr = RepStr + "," + info;             //提交的信息序号,一定要对应
                RepStr = RepStr + "," + dn + getChinesecode("接收到心跳信息! ");          //读卡器上显示文字,显示中文要转换编码
                RepStr = RepStr + ",5";                   //显示时长5秒
                RepStr = RepStr + ",1";                   //蜂鸣器发声种类,取值范围0-12
                RepStr = RepStr + ",";                    //播报的TTS语音

                Response.Write(RepStr);                   //正式项目可以用不显示文字、不响声、不播报语音的指令来回应心跳,也可以不回应,此处加入显示、响声只是用来检测读卡器功能
                Response.End();
            }
            else
            {
                if (info != "" && card != "" && cardtype != "")    //接收到有效的刷卡Request信息,回应驱动读卡器显示文字、蜂鸣响声或播报语音
                {
                    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"  

                    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-12
                    RepStr = RepStr + "," + ChineseVoice;     //播报的TTS语音
                    RepStr = RepStr + ",20";                  //第1继电器开启延时单位,每1个单位延时25mm,20*25表示500mm,取值为0表示关闭继电器
                    RepStr = RepStr + ",30";                  //第2继电器开启延时单位,以,分隔,总计可以控制8个继电器
                    Response.Write(RepStr);                   //将回应信息传送到读卡器驱动读卡器显示文字、蜂鸣响声、播报语音
                    Response.End();

                    //第二种以JSON的方式回应
                    //string jsonText = "{\"Response\":\"json\",\"infotype\":\"1\"";      //固定前缀,我们的设备以此来检索返回信息,表示 驱动设备显示和响声
                    //jsonText = jsonText + ",\"info\":\"" + info + "\"";                 //提交的信息序号,一定要对应
                    //jsonText = jsonText + ",\"disp\":\"" + dispstr + "\"";              //显示文字,注意中文汉字一定要转换为设备能显示的编码,其它字母数字符号不需要转换,{}内的信息反白显示
                    //jsonText = jsonText + ",\"dispdelay\":\"20\"";                      //显示时长20秒
                    //jsonText = jsonText + ",\"beeptype\":\"1\"";                        //蜂鸣器发声种类,取值范围0-12
                    //jsonText = jsonText + ",\"voicetype\":\"" + ChineseVoice + "\"";    //播报的TTS语音
                    //jsonText = jsonText + ",\"k1delay\":\"20\"";                        //第1继电器开启延时单位,每1个单位延时25mm,20*25表示500mm,取值为0表示关闭继电器
                    //jsonText = jsonText + ",\"k2delay\":\"20\"}";                       //第2继电器开启延时单位,以,分隔,总计可以控制8个继电器

                    //Response.ContentType = "application/json";
                    //Response.Write(jsonText);                           //将回应信息传送到读卡器驱动读卡器显示文字、蜂鸣响声、播报语音
                    //Response.End();
                }
                else
                {
                    if (info != "" && scantype != "" && data != "") //接收到有效的扫码信息
                    {
                        dispstr = "{" + getChinesecode("扫码") + ":}" + data+"\\n\\n"; //显示信息,注意中文汉字一定要转换为设备能显示的编码,其它字母数字符号不需要转换,{}内的信息反白显示       
                        ChineseVoice = getChinesecode("扫码") + data;

                        //第一种回应方式
                        string RepStr = "Response=1";             //Response=1 固定前缀,我们的设备以此来检索返回信息,表示 驱动设备显示和响声
                        RepStr = RepStr + "," + info;             //提交的信息序号,一定要对应
                        RepStr = RepStr + "," + dispstr;          //读卡器上显示文字,显示中文要转换编码
                        RepStr = RepStr + ",20";                  //显示时长20秒
                        RepStr = RepStr + ",2";                   //蜂鸣器发声种类,取值范围0-12
                        RepStr = RepStr + "," + ChineseVoice;     //播报的TTS语音
                        RepStr = RepStr + ",20";                  //第1继电器开启延时单位,每1个单位延时25mm,20*25表示500mm,取值为0表示关闭继电器
                        RepStr = RepStr + ",30";                  //第2继电器开启延时单位,以,分隔,总计可以控制8个继电器
                        Response.Write(RepStr);                   //将回应信息传送到读卡器驱动读卡器显示文字、蜂鸣响声、播报语音
                        Response.End();

                        //第二种以JSON的方式回应
                        //string jsonText = "{\"Response\":\"json\",\"infotype\":\"1\"";      //固定前缀,我们的设备以此来检索返回信息,表示 驱动设备显示和响声
                        //jsonText = jsonText + ",\"info\":\"" + info + "\"";                 //提交的信息序号,一定要对应
                        //jsonText = jsonText + ",\"disp\":\"" + dispstr + "\\n\\n\"";        //显示文字,注意中文汉字一定要转换为设备能显示的编码,其它字母数字符号不需要转换,{}内的信息反白显示
                        //jsonText = jsonText + ",\"dispdelay\":\"20\"";                      //显示时长20秒
                        //jsonText = jsonText + ",\"beeptype\":\"1\"";                        //蜂鸣器发声种类,取值范围0-12
                        //jsonText = jsonText + ",\"voicetype\":\"" + ChineseVoice + "\"";    //播报的TTS语音
                        //jsonText = jsonText + ",\"k1delay\":\"20\"";                        //第1继电器开启延时单位,每1个单位延时25mm,20*25表示500mm,取值为0表示关闭继电器
                        //jsonText = jsonText + ",\"k2delay\":\"20\"}";                       //第2继电器开启延时单位,以,分隔,总计可以控制8个继电器

                        //Response.ContentType = "application/json";
                        //Response.Write(jsonText);                           //将回应信息传送到读卡器驱动读卡器显示文字、蜂鸣响声、播报语音
                        //Response.End();

                    }
                }
            }
        }

        catch { }
        
    }

    public static string getChinesecode(string inputstr)   //获取中文编码,显示汉字、TTS中文语音都要转换编码
    {
        int strlen = inputstr.Length;
        string hexcode = "";
        for (int i = 0; i < strlen; i++)
        {
            string str = inputstr.Substring(i, 1);
            byte[] Chinesecodearry = System.Text.Encoding.GetEncoding(936).GetBytes(str);
            int codelen = (byte)Chinesecodearry.Length;
            if (codelen == 1)
            {
                hexcode = hexcode + str;
            }
            else
            {
                hexcode = hexcode + "\\x" + Chinesecodearry[0].ToString("X2") + Chinesecodearry[1].ToString("X2");
            }
        }
        return hexcode;
    }

    public static string getjsonval(string totalstr, string namestr)    //解析JSON数据
    {
        string valustr = "";
        totalstr = totalstr.Replace("{", "");
        totalstr = totalstr.Replace("}", "");
        totalstr = totalstr.Replace("\"", "");
        string[] dataArray = totalstr.Split(new char[2] { ',', ',' });
        if (dataArray.GetUpperBound(0) > 0)
        {
            for (int i = 0; i < dataArray.Length; i++)
            {
                string[] dataArray2 = dataArray[i].Split(new char[2] { ':', ':' });
                if (dataArray2[0] == namestr)
                {
                    valustr = dataArray2[1];
                    break;
                }                      
            }
        }
        return valustr;
    }   

}
前端脚本 :
<%@ 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>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

vx_13822155058

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值