Java实现轻量型Web服务器接收http协议提交的RFID读卡信息

示例使用的读卡器:RFID网络WIFI无线TCP/UDP/HTTP可编程二次开发读卡器POE供电语音-淘宝网 (taobao.com)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.Date;public class httpserver {public static void main(String[] args) throws Exception{int listenport=80; /*监听端口号*/if (args[0]!=null){listenport=Integer.parseInt(args[0]);} //侦听自定义的端口try {ServerSocket ss = new ServerSocket(listenport);while (true) {String condition="";String ResponseStr="";Socket socket = ss.accept(); /*实例化客户端,固定套路,通过服务端接受的对象,生成相应的客户端实例*/BufferedReader bd = new BufferedReader(new InputStreamReader(socket.getInputStream())); /*获取客户端输入流,就是请求过来的基本信息:请求头,换行符,请求体*/String requestHeader;int contentLength = 0;while ((requestHeader = bd.readLine()) != null && !requestHeader.isEmpty()) { /*** 接受HTTP请求,并解析数据 */System.out.println(requestHeader);/*** 获得GET参数*/if (requestHeader.startsWith("GET")) {int begin = requestHeader.indexOf("?") + 1;int end = requestHeader.indexOf("HTTP/");condition = requestHeader.substring(begin, end);ResponseStr=AnalyticHttpInfo(condition);}else {/*** 获得POST参数* 1.获取请求内容长度*/if (requestHeader.startsWith("Content-Length")) {int begin = requestHeader.indexOf("Content-Lengh:") + "Content-Length:".length();String postParamterLength = requestHeader.substring(begin + 1).trim();contentLength = Integer.parseInt(postParamterLength);}}}StringBuffer sb = new StringBuffer();if (contentLength > 0) {for (int i = 0; i < contentLength; i++) {sb.append((char) bd.read());}System.out.println("POST parameter: " + sb.toString());condition=sb.toString().replace("\r\n","");condition=condition.replace("{",""); //可以引用JSON的Jar包来解析json数据,这里将它转一般字符串来处理condition=condition.replace("}","");condition=condition.replace(",","&");condition=condition.replace(":","=");condition=condition.replace("\"","");ResponseStr=AnalyticHttpInfo(condition); //解析读卡器上传的包序号、卡号、机号等信息,并生成回应字符串}/*发送回应信息*/PrintWriter pw = new PrintWriter(socket.getOutputStream());pw.println(ResponseStr);pw.flush();System.out.println("Response: "+ResponseStr+"\r\n");}} catch (IOException e) {e.printStackTrace();}}/*-解析读卡器上传的包序号、机号、卡类型、卡号、卡内数据、设备序列号、读卡状态 等信息,并生成回应字符串------------------------------*/static String AnalyticHttpInfo(String inputstr) throws Exception{String info="";String jihao="";String cardtype="";String card="";String data="";String dn="";String status="";String[] strArr = inputstr.split("&");for (int i=0;i<strArr.length;i++){String[] strPara= strArr[i].split("=");switch(strPara[0]){case "info":info=strPara[1]; //接收到的数据包号,回应时要带入该包号才能正确回应break;case "jihao":jihao=strPara[1]; //设备机号(可自编)break;case "cardtype":cardtype=strPara[1]; //卡类型,1为ID卡,2为HID卡,3为T5557卡,4为EM4305卡,5为IC卡,6为二代证,7为15693卡,8为hid iclass卡break;case "card":card=strPara[1]; //接收到的原始16进制卡号,可根据需要自行转换成其他卡号break;case "data":data=strPara[1]; //读取卡片扇区内容break;case "dn":dn=strPara[1]; //设备硬件序列号,出厂时已固化,全球唯一break;case "status":status=strPara[1]; //读卡状态,如密码认证失败为12break;}}//Response=1 是指定的回应头信息+接收到的包序号+发送到读卡器的显示文字,注意中文一定要转换编码,{}的文字可以着重显示+显示延时秒数+蜂鸣响声代码+固定组合语音代码return "Response=1,"+info+",{"+GetChineseCode("卡号")+":}"+(card+" ").substring(0,12)+GetSysDT()+",20,2,0";}/*取电脑系统日期时间-------------------------------------------------------------------------------------------------*/static String GetSysDT() {Date date=new Date();SimpleDateFormat formatter=new SimpleDateFormat("yy-MM-dd HH:mm:ss");String TimeStr=formatter.format(date);return TimeStr;}/*获取中文编码信息----------------------------------------------------------------------------------------------*/static String GetChineseCode(String inputstr) throws Exception{byte[] Chinesecodearry = inputstr.getBytes("gb2312");int codelen=Chinesecodearry.length;String hexcode="";for (int i=0;i<codelen;i++) {if (i % 2 == 0) {hexcode=hexcode+"\\x";}String bytestr="00"+Integer.toHexString(Chinesecodearry[i] & 0xff);hexcode=hexcode+ bytestr.substring(bytestr.length() -2,bytestr.length());}return hexcode;}
}
相关文章:
Java实现轻量型Web服务器接收http协议提交的RFID读卡信息
示例使用的读卡器:RFID网络WIFI无线TCP/UDP/HTTP可编程二次开发读卡器POE供电语音-淘宝网 (taobao.com) import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSock…...
模拟实现消息队列项目(完结) -- 基于MQ的生产者消费者模型
目录 前言 1. 生产者 2. 消费者 3. 启动消息队列服务器 4. 运行效果 结语 前言 在上一章节,我们完成了消息队列的客户端部分,至此我们整个消息队列项目就构建完成了,那我们做的这个消息队列到底有什么效果,以及如何去使用我们自己的消息队列呢?那么本文,就将我们的MQ进行实战操…...
专业商城财务一体化-线上商城+进销存管理软件,批发零售全行业免费更新
订货流程繁琐?订单处理效率低?小程序商城与进销存系统不打通?数据需要手动输入同步?财务与的结算对账需要大量手工处理?零售批发从业者,如何你也有以上烦恼,可以看看进销存小程序订货商城&#…...
深度思考mysql面经
推荐 1 索引下推 Mysql性能优化:什么是索引下推? 1.1 定义 索引下推(Index Condition Pushdown,简称 ICP)是一种数据库优化技术。在传统的数据库查询中,数据库首先使用索引检索来找到符合索引条件的行&…...
2023-08-09力扣每日一题
链接: 1281. 整数的各位积和之差 题意: 十进制每一位的积减去每一位的和 解: 十进制位处理 实际代码: #include<iostream> using namespace std; int subtractProductAndSum(int n) {int t11,t20;while(n){t1*n%10;t…...
[23] Instruct 3D-to-3D: Text Instruction Guided 3D-to-3D conversion
本文提出一种3D-to-3D转换方法:Instruct 3D-to-3D;借助预训练的Image-to-Image扩散模型,本文方法可以使各个视角图片的似然最大;本文方法显式地将source 3D场景作为condition,可以有效提升3D连续性和可控性。同时&…...
设计模式行为型——访问者模式
目录 访问者模式的定义 访问者模式的实现 访问者模式角色 访问者模式类图 访问者模式举例 访问者模式代码实现 访问者模式的特点 优点 缺点 使用场景 注意事项 实际应用 访问者模式的定义 访问者模式(Visitor Pattern)属于行为型设计模式&am…...
vue3官网文档学习、复习笔记(快速上手)
目录 2.Attribute 绑定(v-bind) 3.事件监听(v-on) 4.表单绑定(v-model) 5.条件渲染(v-if) 6.列表渲染(v-for) all.value all.value.filter(…...
0基础学习VR全景平台篇 第81篇:全景相机-临云镜如何直播推流
临云镜全景相机是阿里巴巴定制全景设备,实现空间三维信息的快速采集,与阿里云三维空间重建平台搭配,帮助品牌商与平台以较低的成本完成空间的快速采集,并支持对室内/室外空间的三维全景展示及空间漫游,同时支持VR浏览、…...
分数线划定
题目描述 查看题目信息 世博会志愿者的选拔工作正在A 市如火如荼的进行。为了选拔最合适的人才,A 市对所有报名的选手进行了笔试,笔试分数达到面试分数线的选手方可进入面试。 面试分数线根据计划录取人数的150%划定,即如果计划录取m名志愿…...
考研C语言进阶题库——更新26-30题
目录 26.一个正整数,如果等于组成它的各个数字的阶数之和,该整数称为阶乘合数,例如1451阶加四阶加五阶,则145是一个三位阶乘合数,输入一个数,问共有多少个阶乘合数?(十万之内) 27.与2相关的数…...
用C语言实现定积分计算(包括无穷积分/可自定义精度)
关于严谨性的声明: 在用C语言进行定积分的计算之前,我需要声明以下几点: 一、我们所进行定积分计算的函数都是应当是黎曼可积的,这保证了我们即使均匀地分割区间也保证了积分的收敛性。 二、我们同时还应该认识到,鉴…...
使用Presto、Trino数据库时提示“The datetime zone id ‘GMT+08:00‘ is not recognised”
出现这个问题的原因是:Presto、Trino的驱动使用了joda这个库来处理时区的问题。但这个库的编写人似乎对java zone的格式没有太多经验。先看一下出错的代码: com.facebook.presto.jdbc.internal.joda.time.DateTimeZone#forID 根据String类型的zoneId转成…...
C# BeginInvoke 加 EndInvoke实现异步操作
1、定义一个委托 delegate long MyDel(int first, int second); 2、 需异步操作的函数 static int sum(int x,int y) {Console.WriteLine("InSide Sum1");Thread.Sleep(1000);Console.WriteLine("InSide Sum2");return x y;} 3、回调方法…...
“华为杯”研究生数学建模竞赛2015年-【华为杯】B题:数据的多流形结构分析(续)
目录 4.2.2 算法复杂度分析 4.2.3 参数影响 4.2.4 问题 3(a)求解 4.3 问题 3(b) 4.3.1 加权稀疏子空间聚类</...
R语言APSIM模型高级应用及批量模拟
随着数字农业和智慧农业的发展,基于过程的农业生产系统模型在模拟作物对气候变化的响应与适应、农田管理优化、作物品种和株型筛选、农田固碳和温室气体排放等领域扮演着越来越重要的作用。APSIM (Agricultural Production Systems sIMulator)模型是世界知名的作物生…...
【硬件设计】模拟电子基础三--集成运算放大电路
模拟电子基础三--集成运算放大电路 一、集成运算放大器1.1 定义、组成与性能1.2 电流源电路1.3 差动放大电路1.4 理想运算放大器 二、集成运算放大器的应用2.1 反向比例运算电路2.2 同向比例运算电路2.3 反向加法运算电路2.4 反向减法运算电路2.5 积分运算电路2.6 微分运算电路…...
JavaWeb(11)——前端综合案例5(小黑记事本)
一、实例需求 ⌛ 功能需求: ① 列表渲染 ② 删除功能 ③ 添加功能 ④ 底部统计 和 清空任务 二、代码实现 ☕ <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8" /> <meta http-equiv"X-UA-Compa…...
在使用TensorFlow的时候内部报错:内部某个方法或属性不存在
看到TensorFlow内部封装的方法报错的时候,我的第一反应是版本不匹配,立马去搜了对应版本,按照网上给的TensorFlow 2.2.0keras 2.3.1 python 3.7,反反复复安装、卸载、升级、降低版本了很多回还是八行,就在心态快要爆爆…...
dubbo之高可用
负载均衡 概述 负载均衡是指在集群中,将多个数据请求分散到不同的单元上执行,主要是为了提高系统的容错能力和对数据的处理能力。 Dubbo 负载均衡机制是决定一次服务调用使用哪个提供者的服务。 策略 在Dubbo中提供了7中负载均衡策略,默…...
Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...
8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂
蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...
WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...
云原生玩法三问:构建自定义开发环境
云原生玩法三问:构建自定义开发环境 引言 临时运维一个古董项目,无文档,无环境,无交接人,俗称三无。 运行设备的环境老,本地环境版本高,ssh不过去。正好最近对 腾讯出品的云原生 cnb 感兴趣&…...
Python Ovito统计金刚石结构数量
大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...
搭建DNS域名解析服务器(正向解析资源文件)
正向解析资源文件 1)准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2)服务端安装软件:bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...
Qemu arm操作系统开发环境
使用qemu虚拟arm硬件比较合适。 步骤如下: 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载,下载地址:https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...
Rust 开发环境搭建
环境搭建 1、开发工具RustRover 或者vs code 2、Cygwin64 安装 https://cygwin.com/install.html 在工具终端执行: rustup toolchain install stable-x86_64-pc-windows-gnu rustup default stable-x86_64-pc-windows-gnu 2、Hello World fn main() { println…...
多元隐函数 偏导公式
我们来推导隐函数 z z ( x , y ) z z(x, y) zz(x,y) 的偏导公式,给定一个隐函数关系: F ( x , y , z ( x , y ) ) 0 F(x, y, z(x, y)) 0 F(x,y,z(x,y))0 🧠 目标: 求 ∂ z ∂ x \frac{\partial z}{\partial x} ∂x∂z、 …...
【记录坑点问题】IDEA运行:maven-resources-production:XX: OOM: Java heap space
问题:IDEA出现maven-resources-production:operation-service: java.lang.OutOfMemoryError: Java heap space 解决方案:将编译的堆内存增加一点 位置:设置setting-》构建菜单build-》编译器Complier...
