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}/`);
});

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/451841.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

阿里云数据库导出 | 数据管理(兼容数据库备份)

文章目录 1、数据库导出2、操作步骤3、DMS - Data Management Service 1、数据库导出 2、操作步骤 3、DMS - Data Management Service

C#的自定义对话框和提示窗体 - 开源研究系列文章

上次的应用因为需要用到对话框和提示窗体,然后系统自带的MessageBox界面个人又看不上,所以就想自己编写一个自定义的窗体,于是有了本文,具体的已经应用到笔者其它的应用里了。 1、 项目目录; 2、 源码介绍;…

Bootstrapping、Bagging 和 Boosting

bagging方法如下: bagging和boosting比较

k8s-对命名空间资源配额

对k8s命名空间限制的方法有很多种,今天来演示一下很常用的一种 用的k8s对象就是ResourceQuota 一:创建命名空间 kubectl create ns test #namespace命名空间可以简写成ns 二: 对命名空间进行限制 创建resourcequota vim resourcequ…

秋招面试题记录_半结构化面试

c八股(可能问的多一点) 1.简单说说C11语法特性 答: 1.auto以及decltype自动类型推导,避免手动声明复杂类型,减少冗长代码提升了可读性和安全性。 2.智能指针 自动释放内存 (具体说说) 有shared和unique 差异主要体现在所有权、内存开销、…

Java项目-基于Springboot的高校党务系统项目(源码+说明).zip

作者:计算机学长阿伟 开发技术:SpringBoot、SSM、Vue、MySQL、ElementUI等,“文末源码”。 开发运行环境 开发语言:Java数据库:MySQL技术:SpringBoot、Vue、Mybaits Plus、ELementUI工具:IDEA/…

基于SpringBoot的“社区医院管理服务系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“社区医院管理服务系统”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:SpringBoot 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 系统首页界面图 用户注册界面图 医生界面…

OpenWRT 和 Padavan 路由器配置网络打印机 实现远程打印

本文首发于只抄博客,欢迎点击原文链接了解更多内容。 前言 之前有给大家介绍过 Armbian 安装 CUPS 作为打印服务器,像是 N1 盒子、玩客云,甚至是随身 WiFi 都可以通过 CUPS 来进行打印。但是有些朋友不想专门为打印机添置一个设备&#xff0…

jeecg3版本的vue,离线启动

jeecg的vue2版本已经停止维护,所以只能用vue3的版本。3版本中使用的是pnpm(npm的增强版本)下载依赖。使用pnpm安装的node_modules,不能直接复制到离线主机中(因为在 pnpm安装过程中,会给依赖的配置文件写死…

数据库、数据仓库、数据湖和数据中台有什么区别

很多企业在面对数据存储和管理时不知道如何选择合适的方式,数据库、数据仓库、数据湖和数据中台,这些方式都是什么?有什么样的区别?企业根据其业务类型该选择哪一种?本文就针对这些问题,来探讨下这些方式都…

React路由 基本使用 嵌套路由 动态路由 获取路由参数 异步路由 根据配置文件来生成路由

文章目录 React-router的三个版本react-router使用嵌套路由动态路由 获取路由参数Params参数Query参数Location信息 控制跳转地址异步路由根据配置文件生成路由 React-router的三个版本 React-router 服务端渲染使用React-router-dom 浏览器端渲染使用React-router-native Rea…

Electron入门笔记

Electron入门笔记 ElectronElectron 是什么Electron流程模型创建第一个Electron项目配置自动重启主进程和渲染进程通信打包应用 Electron Electron 是什么 跨平台的桌面应用开发框架使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 嵌入 Chromium和 Node.js Electro…

基于System.js的微前端实现(插件化)

目录​​​​​​​ 写在前面 一、微前端相关知识 (一)概念 (二) 优势 (三) 缺点 (四)应用场景 (五)现有框架 1. qiankun 2. single-spa 3. SystemJ…

机器学习课程学习周报十七

机器学习课程学习周报十七 文章目录 机器学习课程学习周报十七摘要Abstract一、机器学习部分1. 变分推断/推理1.1 证据下界1.2 q ( z ) {q(z)} q(z)的选取 2. VAE2.1 Auto-Encoder的简单回顾2.2 为什么提出VAE2.3 VAE的数学原理 3. Diffusion Model的数学原理3.1 Training算法…

【C语言】递归函数变量的作用域

变量的作用域 全局变量:在整个程序内可以识别,且唯一。 局部变量:仅在当前函数内有效,比如main函数、用户自定义函数。 递归函数 指的是一类函数,函数调用自身,包括递推和回归。使用递归的方式&#xff0c…

JavaWeb 19 AJAX

目录 一、什么是AJAX 同步交互和异步交互 同步交互 异步交互 Ajax工作原理 Ajax实现方式 原生JavaScript方式进行ajax(了解): "我就是希望你好,就像很多人希望我好一样,特别简单,特别真挚。也不为了什么,就是希望…

从0开始深度学习(14)——模型选择、欠拟合、过拟合

① 模型在训练数据上拟合的比在潜在分布中更接近的现象,就叫过拟合(overfitting) ② 用于对抗过拟合的技术称为正则化(regularization) 1 训练误差和泛化误差 ①训练误差(training error)&…

Gee引擎配置微端后登录游戏黑屏怎么办?

GEE引擎配置微端后登录游戏黑屏怎么办?今天飞飞和你们分享GEE引擎配置微端后游戏黑屏的解决办法,希望可以帮助到你~ 1、端口不对 微端没有更新,玩家进入游戏是地图跟装备都看不见,是漆黑的,微端显示连接失败&#xff…

c语言字符串函数strstr,strtok,strerror

1,strtok函数的使用和模拟实现 char * strtok(char * str,const char * sep) 会有static修饰变量,有记忆功能,会保存字符串的位置,下次找再继续找。 1)sep参数指向一个字符串,它包含了0个或者多个由sep字符中一个或…

极客wordpress模板

这是一个展示WordPress主题的网页设计。页面顶部有一个导航栏,包含多个选项,如“关于我们”、“产品中心”、“案例展示”、“新闻动态”、“联系我们”和“技术支持”。页面中间部分展示了多个产品,每个产品都有一个图片和简短的描述。页面下…