远程读卡器web客户端(nodejs+websocket实现实时指令交互)
工具目的:在公司对现场的卡片进行测卡,读写卡测试,远程诊断卡片问题,快速定位和解决现场问题。
之前的那一个版本的小工具,远程读卡器web客户端,实现原理是把读写卡服务装在远程(现场)的电脑上,这样有一些缺点,比如现场电脑必须开启端口映射,让客户端能否访问到。只能写好脚本,执行结束后才能看到结果。必能实时的看到指令与卡片的交互过程。
这次用nodejs的express web框架,实现一个简易的读写卡客户端,并且做成聊天室的样式,且允许多人观看和操作执行结果。 读写卡服务不再装在了现场,所以现场网络只需要能访问外网即可,无需开端口映射。
现场电脑只需要装一个客户端,这个客户端完成功能是串口操作读卡器,通过socket连接服务端。等于是服务端放到了公司这边来了。只需公司这边开启一个外网映射,全国各地的终端读卡器都可以接入进来。看到的效果就是 “读卡器XXX进入了聊天室”,就可以发指令和它聊天啦
附:运行结果截图
截图2:
截图3:客户端的显示
客户端用python实现,完成串口转TCP。
#coding=utf-8
#author:yangyongzhen
#QQ:534117529
#'CardTest TcpServer - Simple Test Card Tool 1.00' import sys,threading,time;
import serial;
import binascii,encodings;
import re;
import os;
from socket import *
from struct import *;
#from myutil import *;
#name: myutil.pymylock = threading.RLock() Server_IP = ''
Srever_Port = ''def print_hex1(s,prev='0x'):for c in s:print '%s%02x' %(prev,ord(c)),print
def print_hex(s):for c in s:print '%02x' %(ord(c)),printdef hexto_str(s):r =''for c in s:r += '%02x' %(ord(c))return r
def strto_hex(s):r = s.decode('hex')return r
#''代表服务器为localhost#在一个非保留端口号上进行监听class ComThread:def __init__(self, Port=0):self.l_serial = None;self.alive = False;self.waitEnd = None;self.port = Port;#TCP部分#self.sockobj = socket.socket(socket.AF_INET, socket.SOCK_STREAM)self.connection = None#数据self.snddata = ''self.rcvdata = ''def waiting(self):if not self.waitEnd is None:self.waitEnd.wait();def SetStopEvent(self):if not self.waitEnd is None:self.waitEnd.set();self.alive = False;self.stop();def start(self):self.l_serial = serial.Serial();self.l_serial.port = self.port;self.l_serial.baudrate = 115200;self.l_serial.timeout = 2; #秒self.l_serial.open();if self.l_serial.isOpen():self.waitEnd = threading.Event();self.alive = True;print 'open serial port %d ok!\n' %(self.port+1)print 'baudrate:115200 \n'self.thread_read = None;self.thread_read = threading.Thread(target=self.FirstReader);self.thread_read.setDaemon(1);self.thread_read.start();self.thread_write = None;self.thread_write = threading.Thread(target=self.FirstWriter);self.thread_write.setDaemon(1);self.thread_write.start();#TCP部分self.thread_TcpClient = None;self.thread_TcpClient = threading.Thread(target=self.TcpClient);self.thread_TcpClient.setDaemon(1);self.thread_TcpClient.start();self.thread_TcpSend = None;self.thread_TcpSend = threading.Thread(target=self.TcpSend);self.thread_TcpSend.setDaemon(1);self.thread_TcpSend.start();return True;else:return False;def FirstReader(self):while self.alive:# 接收间隔time.sleep(0.1);try:data = '';n = self.l_serial.inWaiting();if n:data = data+self.l_serial.read(n);#for l in xrange(len(data)):#print '%02X' % ord(data[l]),# 发送数据print u'->请求:'print data;mylock.acquire() self.snddata = datamylock.release()#print_hex(data);# 判断结束except Exception, ex:print str(ex);self.waitEnd.set();self.alive = False;def FirstWriter(self):while self.alive:# 接收间隔time.sleep(0.1);try:#snddata = raw_input('\nenter data send:\n')if self.rcvdata!='':self.l_serial.write(self.rcvdata); print u'-<应答:'print self.rcvdata;mylock.acquire() self.rcvdata = '';mylock.release()#print_hex(snddata);except Exception, ex:print str(ex);self.waitEnd.set();self.alive = False;def TcpClient(self):while True:# 接收间隔time.sleep(0.1);self.connection = socket(AF_INET, SOCK_STREAM);self.connection.connect((Server_IP, int(Server_Port)));print 'Connect to Server OK!';self.snddata = ''self.rcvdata = ''while True:#读取客户端套接字的下一行data = self.connection.recv(1024)#如果没有数量的话,那么跳出循环if not data: break#发送一个回复至客户端mylock.acquire() self.snddata = ''self.rcvdata = datamylock.release()#connection.send('Echo=>' + data)self.connection.close()self.waitEnd.set();self.alive = False;def TcpSend(self):while True:# 接收间隔time.sleep(0.1);while True:time.sleep(0.1);try:if not self.connection is None:if self.snddata != '':self.connection.send(self.snddata)mylock.acquire() self.rcvdata = ''self.snddata = ''mylock.release()except Exception, ex:pass def stop(self):self.alive = False;self.thread_read.join();if self.l_serial.isOpen():self.l_serial.close();#测试用部分
if __name__ == '__main__':print 'Serial to Tcp Tool 1.00\n' print 'Author:yangyongzhen\n'print 'QQ:534117529\n'print 'Copyright (c) ***** 2015-2016.\n'Server_IP = raw_input('please enter ServerIP:')print 'Server_IP: %s' %(Server_IP)Server_Port = raw_input('please enter ServerPort:')print 'Server_Port: %s' %(Server_Port)com =raw_input('please enter com port(1-9):')rt = ComThread(int(com)-1);try:if rt.start():rt.waiting();rt.stop();else:pass; except Exception,se:print str(se);if rt.alive:rt.stop();os.system("pause")print '';print 'End OK .';del rt;
-------------------------------------------------------------------------------------------
成功不是追求别人眼中的最好,而是把自己能做的事情做得最好。
每个人都应该有梦想,这才是生命的意义。
做事情贵在坚持,只有这份坚持,才实践了意义。
处处留心皆学问,爱学习,爱思考。
在这里分享学习,分享感悟,共同进步。
凝聚学习的圈子,思考的圈子。
扫码关注个人微信公众号:aazhen1987
凝聚学习和思考的圈子。
--------------------------------------------------------------------------------------------
远程读卡器web客户端(nodejs+websocket实现实时指令交互)相关推荐
- 我的小工具-远程读卡器web客户端(PHP+LUA)
晚上睡不着,想着白天工作上的事,解决一个现场读卡问题就需要出趟差值得吗.想着在公司就能把现场的卡给读写诊断了,能让数据跑路就别让人跑路,说干就干. 本工具是在浏览器中以Lua脚本的形式对CPU卡,M1 ...
- web与服务器之间的信息交互,web客户端与服务器端如何进行交互
web客户端与服务器端如何进行交互 内容精选 换一换 开启了 Kerberos认证的安全模式集群,进行应用开发时需要进行安全认证.Kerberos这一名词来源于希腊神话"三个头的狗--地狱之 ...
- nodejs项目_多人群聊实现其实很简单:Nodejs+WebSocket+Vue轻松实现Web IM
点击右上方红色按钮关注"web秀",让你真正秀起来 前言 在<Nodejs + WebSocket简单介绍及示例 - 第一章>中简单的介绍了,Nodejs + WebS ...
- 远程桌面Web连接访问及端口更改方法
在Windows 2000 Server时代,运用其内置的"终端服务"功能使我们可以对服务器进行远程操作和控制:利用Windows Server 2003新增的"远程桌面 ...
- Zoom的Web客户端与WebRTC有何不同?
Zoom是非常出色的视频会议平台,拿Zoom的web客户端和WebRTC对比似乎有失公允.重要的是,未来WebRTC还会不断做明智的改进. 文 / Philipp Hancke 译 / 龙艳 原文 h ...
- 巧用windows xp远程桌面web连接
(中关村在线)我家中有两台电脑(各有一块10M网卡),一台赛扬600的台式机,配以15吋的普通显示器,分辨率800*600:一台古老的奔腾笔记本电脑,配以13.3的液晶屏,可上1024*768 16 ...
- 远程桌面 Web 连接
下载:远程桌面WEB连接工具 1.0 简介 1.1 什么是远程桌面 Web 连接? 欢迎使用"远程桌面 Web 连接"."远程桌面 Web 连接"是" ...
- asp.net中使用excel类导出Excel文件,并导出到web客户端中遇到的问题
asp.net中使用excel类导出Excel文件,并导出到web客户端中遇到错误: 检索Com类工厂中CLSID为{000245-0000-0000-C000-000000000046}的组件失败, ...
- web 实时刷新 websocket 大数据
最近在做的一个项目,是一个大数据分析平台,有如下需求:有如果个实验设备运行并且将运行数据通过socket发送到分析平台,分析平台通过运行socket作业来完成对socket数据的接收,同时还需要对接收 ...
最新文章
- android 9 pie公司,谷歌Android 9 Pie,真正的安卓派
- “头移植模型”论文称换头术可行 业内疑两大问题未解
- TCP三次握手Render Tree页面渲染=从输入URL到页面显示的过程?
- 使用 Linux 和 Hadoop 进行分布式计算
- BigData之Storm:Apache Storm的简介、深入理解、下载、案例应用之详细攻略
- C# 10 完整特性介绍
- ubuntu18.04 出现 Command 'ifconfig' not found 问题的解决办法
- Linux命令大全完整版
- Android URL Scheme
- 今日头条推荐算法原理全文详解之二
- Microsoft ADO Data Control,version 6.0(OLEDB) 不支持此接口
- Win10 中主机名hosts 文件位置
- Directx11教程(58) 鼠标控制摄像机
- hive3.0使用问题小记
- WebAssembly 初探
- 技巧_altium中两个PCB文件合并为一个进行加工
- 微信小程序map 地图引入配置+腾讯地图地址坐标解析
- Joint fully convolutional and graph convolutional networks for weakly-supervised segmentation of
- 项目提测CheckList通用版
- hdu1002 a+bII 大数相加