本示例使用设备: https://item.taobao.com/item.htm?spm=a21dvs.23580594.0.0.1d292c1buHvw58&ft=t&id=22173428704
Javascript源码
//引用http模块创建web服务器,监听指定的端口获取以GET、POST、JSON等方式上传的数据,并回应驱动读卡器显示文字、蜂鸣响声、播报语音、开启继电器等操作。
const http = require('http');
const url = require('url');
const querystring=require('querystring');const hostname = '192.168.1.211'; //本机IP
const port = 88; //监听端口let info=""; //接收到的数据包号,需回应该包号
let jihao=""; //设备自编机号
let cardtype=""; //刷卡标志,卡类型
let scantype=""; //扫码标志
let heartbeattype=""; //心跳包标志
let card=""; //接收到的原始16进制卡号,可根据需要自行转换成其他卡号
let data=""; //扇区内容 或 扫码信息
let input=""; //输入标识
let output=""; //输出标识
let rand=""; //设备随机数
let dn=""; //设备硬件序列号,出厂时已固化,全球唯一
let status=""; //读卡状态,如12表示卡密码认证失败
let RepStr="";const server = http.createServer((request, response) => {console.log(request.method);console.log(request.url);console.log(request.httpVersion);console.log(request.headers);console.log(request.headers.host);if(request.method=="GET"){ //解析GET方式提交的数据let res = url.parse(request.url, true);info=res.query.info;jihao=res.query.jihao;cardtype=res.query.cardtype;scantype=res.query.scantype;heartbeattype=res.query.heartbeattype;card=res.query.card;data=res.query.data;input=res.query.input;output=res.query.output;rand=res.query.rand;dn=res.query.dn;status=res.query.status;if (info !="" && dn !=""){ //通过解析获取到了数据包信息info 和设备硬件信息, 表示确为HTTP 网络读卡器上传的信息,立即回应RepStr="Response=1"; //Response=1 固定前缀,我们的设备以此来检索返回信息,表示 驱动设备显示和响声 RepStr = RepStr + "," + info; //提交的信息序号,一定要对应RepStr = RepStr + ",Cardno:"+ card+" welcome to use!"; //读卡器上显示文字,显示中文要转换编码,显示信息不能有半角符逗号RepStr = RepStr + ",5"; //显示时长,单位为秒RepStr = RepStr + ",2"; //蜂鸣器发声种类,取值范围0-12RepStr = RepStr + ","; //播报的TTS语音,中文语音要转换编码RepStr = RepStr + ",20"; //第1继电器开启延时单位,每1个单位延时25mm,20*25表示500mm,取值为0表示关闭继电器RepStr = RepStr + ",30"; //第2继电器开启延时单位,以,分隔,总计可以控制8个继电器response.end(RepStr);console.log(RepStr+"\n\n");} }else if(request.method=="POST"){let body = '';request.on('data', chunk => {body += chunk.toString();});request.on('end', () => {console.log(body); let obj=querystring.parse(body); //解析POST方式提交的数据info=obj.info;jihao=obj.jihao;cardtype=obj.cardtype;scantype=obj.scantype;heartbeattype=obj.heartbeattype;card=obj.card;data=obj.data;input=obj.input;output=obj.output;rand=obj.rand;dn=obj.dn;status=obj.status;if (info ==undefined ){var jsonParsed = JSON.parse(body); //解析POST JSON方式提交的数据 //console.log(jsonParsed);info=jsonParsed.info;jihao=jsonParsed.jihao;cardtype=jsonParsed.cardtype;scantype=jsonParsed.scantype;heartbeattype=jsonParsed.heartbeattype;card=jsonParsed.card;data=jsonParsed.data;input=jsonParsed.input;output=jsonParsed.output;rand=jsonParsed.rand;dn=jsonParsed.dn;status=jsonParsed.status;}if (info !="" && dn !=""){ //通过解析获取到了数据包信息info 和设备硬件信息, 表示确为HTTP 网络读卡器上传的信息,立即回应RepStr="Response=1"; //Response=1 固定前缀,我们的设备以此来检索返回信息,表示 驱动设备显示和响声 RepStr = RepStr + "," + info; //提交的信息序号,一定要对应RepStr = RepStr + ",Cardno:"+ card+" welcome to use!"; //读卡器上显示文字,显示中文要转换编码,显示信息不能有半角符逗号RepStr = RepStr + ",5"; //显示时长,单位为秒RepStr = RepStr + ",2"; //蜂鸣器发声种类,取值范围0-12RepStr = RepStr + ","; //播报的TTS语音,中文语音要转换编码RepStr = RepStr + ",20"; //第1继电器开启延时单位,每1个单位延时25mm,20*25表示500mm,取值为0表示关闭继电器RepStr = RepStr + ",30"; //第2继电器开启延时单位,以,分隔,总计可以控制8个继电器response.end(RepStr);console.log(RepStr+"\n\n");} }); }
})server.listen(port, hostname, () => {console.log(`Server running at http://${hostname}:${port}/`);
});