Nodejs使用http模块创建Web服务器接收解析RFID读卡器刷卡数据

本示例使用设备: 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}/`);
});
相关文章:
Nodejs使用http模块创建Web服务器接收解析RFID读卡器刷卡数据
本示例使用设备: https://item.taobao.com/item.htm?spma21dvs.23580594.0.0.1d292c1buHvw58&ftt&id22173428704 Javascript源码 //引用http模块创建web服务器,监听指定的端口获取以GET、POST、JSON等方式上传的数据,并回应驱动读卡…...
基于python的《C语言程序设计》课程成绩分析
作者:Svan.声明:未经本人允许,不得对本文中的任何内容、数据进行转载,本人(作者)已经对本文内容申请撰写了论文,随意转载使用本文任何内容的,要追究其法律责任!!…...
@Component 和 @Bean 的区别与联系
相同点: Component 和 Bean 是两种使用注解来定义bean的方式。 Component和Bean的目的是一样的,都是注册bean到Spring容器中。 两者都可以通过Autowired装配 不同点: Component 和 它的子类型(Controller, Service and Reposit…...
高手炒现货黄金短线的方法
现货黄金短线交易的精髓在于“计划你的交易”。短线交易不是临时起意的赌博,也不是盘口随意的追涨杀跌,而是所有因素分析以后的结果。新手进行短线操作容易流为频繁的随意操作,导致成功率不高。但当投资者有了准备,短线交易就再也…...
后端:唯一ID有哪些生成方式
文章目录 在后端开发中的ID生成策略1. 数字型 ID特点:优点:缺点:例子:常见用法: 2. UUID(通用唯一标识符)特点:优点:缺点:例子:常见用法ÿ…...
LabVIEW提高开发效率技巧----高精度延时
在LabVIEW开发中,时间控制是许多应用中的关键环节,尤其是高精度应用中,时钟漂移会严重影响程序的准确性。为此,使用Wait Until Next ms Multiple来代替简单的Wait (ms),可以显著减少时钟漂移,确保高精度延时…...
<Link><Link> 和 <a> </a>标签的区别
1. Link (React Router): 作用: Link 是 react-router-dom 提供的组件,用于在 React 应用中创建前端路由跳转。它不会导致页面重新加载。优点: 无刷新跳转: 使用 Link 进行导航时,React 的路由器会捕获并处理链接,避免浏览器的全…...
靶场战神为何会陨落?
我从第一个SQL注入漏洞原理学起,从sql-libas到DVWA,到pikachu再到breach系列,DC系列靶场,再到实战挖洞,发现靶场与实战的区别是极其大的。 我个人觉得在这种web环境下,难的不是怎么测一个漏洞点,而是怎么找一个漏洞点。靶场与实战最大的区别在于你不知道这个地方到底有没有漏洞…...
rpm 命令
rpm(Red Hat Package Manager)是 Red Hat Linux 及其衍生发行版(如 CentOS、Fedora)中用于管理软件包的系统。它允许用户安装、卸载、升级、查询和验证软件包。 一、安装软件包 (1)安装一个 RPM 软件包&a…...
录微课专用提词器,不会被录进视频中的提词器,还能显示PPT中备注的内容
不坑提词器,全称:不坑隐形提词器。是一款能够在截图、录屏、直播过程中隐藏界面的提词器软件。 系统要求:Win10 1024 以上(特别提醒:Win7状态下不可隐身) ⏬下载 提词器默认放在不坑盒子的安装目录下&…...
Ansible概述
目录 一、ansible简介 二、absible的特点 三、ansible的工作原理以及流程 四、ansible环境安装部署 五、ansible命令行模块 六、inventory 主机清单 一、ansible简介 Ansible是一个基于Python开发的配置管理和应用部署工具,现在也在自动化管理领域大放异彩。…...
NTC 温度电阻计算方式
100K温度值列表 https://wenku.baidu.com/view/59565cba1a37f111f1855b38?aggId989bc39968d97f192279168884868762cbaebb44&frcatalogMain_text_ernie_recall_feed_index%3Awk_recommend_main1&wkts1729568234531&bdQuery100K%E6%B8%A9%E5%BA%A6%E7%94%B5%E9%98%B…...
Qt中自定义qDebug打印信息的宏(文件名,行数,函数名,日期,时间等前缀)并取消打印
使用qDebug()打印信息时,默认打印"<<"符号后面的信息。 通过自定义宏,可以额外打印文件名,行数,函数,日期、时间等前缀,方便快速定位调式信息的位置。 同时,可以定义宏取消打…...
【基于docker的深度学习训练环境】关键步骤记录
最近给公司搭建了一个小型的深度学习环境,实现了多人通过SSH对GPU资源的利用,下面对一些关键架构和易用性部分进行记录。 一、整体软硬件框架 1、硬件配置,采用的双GPU的方案,两块消费级显卡。 2、应用层架构 宿主机系统为ubunt…...
管理、情商、格局-冯唐讲资质通鉴-笔记
一、CEO职责 制定制度、维护制度,制度即礼,礼崩乐坏,万万不能制定战略找钱、找人 二、汇报线 不能向上越级汇报不能向上越级管理 三、领导 领导出错的情况,依然要服从领导的安排,领导的错轮不到我们来处理干预&am…...
摇人摇人, JD内推岗位(社招+校招)
摇人摇人, 有找工作的家人们看过来啊~ 虚位以待, 快到碗里来 算法开发工程师岗 京东云 北京|T7, 5-10年 岗位职责: 参与基于RAG知识库平台和ChatBI产品打造和商业化落地,进行相关技术:包括OCR、文档拆分、意图理解、多轮对话、NL2SQL、Embed…...
振弦式传感器在高边坡监测中发挥哪些优势?
振弦式传感器在高边坡监测中发挥哪些优势?在工程建设与地质灾害防治领域,高边坡监测至关重要。高边坡的稳定性直接关系到工程的安全以及周边环境和人员的生命财产安全。为了实现对高边坡的有效监测,各种先进的传感器技术被广泛应用,其中振弦…...
计算机网络基础进阶
三次握手四次挥手 三次握手 1------建立连接----------------------2 ACK1,seq0 2------传输数据,建立连接---------1 1------传输数据,建立连接---------2 三次握手用于建立TCP连接,确保通信双方都准备好进行数据传输。整个…...
什么是“钻石继承问题”
钻石继承问题(Diamond Inheritance Problem) 主要是指在多重继承中,由于继承关系的复杂性,子类可能通过多个路径继承到相同的基类,从而导致成员的多份副本或者方法调用的二义性。 C 通过 虚拟继承 来解决这个问题&…...
iOS 回到主线程刷新UI
在iOS 里面,项目打开就会运行一个主线程,所有的UI都在主线程里进行.其他网络请求或者耗时操作理论上也可以在主线程运行,但是如果太耗时,那么就会影响主线程其他UI.所以需要开字线程来进行耗时操作,子线程进行完耗时操作之后,如果项目需求有需要刷新UI,或者改变UI,一定得回到主…...
多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度
一、引言:多云环境的技术复杂性本质 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时,基础设施的技术债呈现指数级积累。网络连接、身份认证、成本管理这三大核心挑战相互嵌套:跨云网络构建数据…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...
C++八股 —— 单例模式
文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全(Thread Safety) 线程安全是指在多线程环境下,某个函数、类或代码片段能够被多个线程同时调用时,仍能保证数据的一致性和逻辑的正确性…...
2023赣州旅游投资集团
单选题 1.“不登高山,不知天之高也;不临深溪,不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...
腾讯云V3签名
想要接入腾讯云的Api,必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口,但总是卡在签名这一步,最后放弃选择SDK,这次终于自己代码实现。 可能腾讯云翻新了接口文档,现在阅读起来,清晰了很多&…...
uni-app学习笔记三十五--扩展组件的安装和使用
由于内置组件不能满足日常开发需要,uniapp官方也提供了众多的扩展组件供我们使用。由于不是内置组件,需要安装才能使用。 一、安装扩展插件 安装方法: 1.访问uniapp官方文档组件部分:组件使用的入门教程 | uni-app官网 点击左侧…...
WebRTC调研
WebRTC是什么,为什么,如何使用 WebRTC有什么优势 WebRTC Architecture Amazon KVS WebRTC 其它厂商WebRTC 海康门禁WebRTC 海康门禁其他界面整理 威视通WebRTC 局域网 Google浏览器 Microsoft Edge 公网 RTSP RTMP NVR ONVIF SIP SRT WebRTC协…...
生信服务器 | 做生信为什么推荐使用Linux服务器?
原文链接:生信服务器 | 做生信为什么推荐使用Linux服务器? 一、 做生信为什么推荐使用服务器? 大家好,我是小杜。在做生信分析的同学,或是将接触学习生信分析的同学,<font style"color:rgb(53, 1…...
HTML版英语学习系统
HTML版英语学习系统 这是一个完全免费、无需安装、功能完整的英语学习工具,使用HTML CSS JavaScript实现。 功能 文本朗读练习 - 输入英文文章,系统朗读帮助练习听力和发音,适合跟读练习,模仿学习;实时词典查询 - 双…...
java 局域网 rtsp 取流 WebSocket 推送到前端显示 低延迟
众所周知 摄像头取流推流显示前端延迟大 传统方法是服务器取摄像头的rtsp流 然后客户端连服务器 中转多了,延迟一定不小。 假设相机没有专网 公网 1相机自带推流 直接推送到云服务器 然后客户端拉去 2相机只有rtsp ,边缘服务器拉流推送到云服务器 …...
