工具目的:在公司对现场的卡片进行测卡,读写卡测试,远程诊断卡片问题,快速定位和解决现场问题。

之前的那一个版本的小工具,远程读卡器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实现实时指令交互)相关推荐

  1. 我的小工具-远程读卡器web客户端(PHP+LUA)

    晚上睡不着,想着白天工作上的事,解决一个现场读卡问题就需要出趟差值得吗.想着在公司就能把现场的卡给读写诊断了,能让数据跑路就别让人跑路,说干就干. 本工具是在浏览器中以Lua脚本的形式对CPU卡,M1 ...

  2. web与服务器之间的信息交互,web客户端与服务器端如何进行交互

    web客户端与服务器端如何进行交互 内容精选 换一换 开启了 Kerberos认证的安全模式集群,进行应用开发时需要进行安全认证.Kerberos这一名词来源于希腊神话"三个头的狗--地狱之 ...

  3. nodejs项目_多人群聊实现其实很简单:Nodejs+WebSocket+Vue轻松实现Web IM

    点击右上方红色按钮关注"web秀",让你真正秀起来 前言 在<Nodejs + WebSocket简单介绍及示例 - 第一章>中简单的介绍了,Nodejs + WebS ...

  4. 远程桌面Web连接访问及端口更改方法

    在Windows 2000 Server时代,运用其内置的"终端服务"功能使我们可以对服务器进行远程操作和控制:利用Windows Server 2003新增的"远程桌面 ...

  5. Zoom的Web客户端与WebRTC有何不同?

    Zoom是非常出色的视频会议平台,拿Zoom的web客户端和WebRTC对比似乎有失公允.重要的是,未来WebRTC还会不断做明智的改进. 文 / Philipp Hancke 译 / 龙艳 原文 h ...

  6. 巧用windows xp远程桌面web连接

    (中关村在线)我家中有两台电脑(各有一块10M网卡),一台赛扬600的台式机,配以15吋的普通显示器,分辨率800*600:一台古老的奔腾笔记本电脑,配以13.3的液晶屏,可上1024*768  16 ...

  7. 远程桌面 Web 连接

    下载:远程桌面WEB连接工具 1.0 简介 1.1 什么是远程桌面 Web 连接? 欢迎使用"远程桌面 Web 连接"."远程桌面 Web 连接"是" ...

  8. asp.net中使用excel类导出Excel文件,并导出到web客户端中遇到的问题

    asp.net中使用excel类导出Excel文件,并导出到web客户端中遇到错误: 检索Com类工厂中CLSID为{000245-0000-0000-C000-000000000046}的组件失败, ...

  9. web 实时刷新 websocket 大数据

    最近在做的一个项目,是一个大数据分析平台,有如下需求:有如果个实验设备运行并且将运行数据通过socket发送到分析平台,分析平台通过运行socket作业来完成对socket数据的接收,同时还需要对接收 ...

最新文章

  1. android 9 pie公司,谷歌Android 9 Pie,真正的安卓派
  2. “头移植模型”论文称换头术可行 业内疑两大问题未解
  3. TCP三次握手Render Tree页面渲染=从输入URL到页面显示的过程?
  4. 使用 Linux 和 Hadoop 进行分布式计算
  5. BigData之Storm:Apache Storm的简介、深入理解、下载、案例应用之详细攻略
  6. C# 10 完整特性介绍
  7. ubuntu18.04 出现 Command 'ifconfig' not found 问题的解决办法
  8. Linux命令大全完整版
  9. Android URL Scheme
  10. 今日头条推荐算法原理全文详解之二
  11. Microsoft ADO Data Control,version 6.0(OLEDB) 不支持此接口
  12. Win10 中主机名hosts 文件位置
  13. Directx11教程(58) 鼠标控制摄像机
  14. hive3.0使用问题小记
  15. WebAssembly 初探
  16. 技巧_altium中两个PCB文件合并为一个进行加工
  17. 微信小程序map 地图引入配置+腾讯地图地址坐标解析
  18. Joint fully convolutional and graph convolutional networks for weakly-supervised segmentation of
  19. 项目提测CheckList通用版
  20. hdu1002 a+bII 大数相加

热门文章

  1. C++ 多线程——pthread_cancel 取消线程的疑惑
  2. 乐视体育取消欧冠半决赛直播 欧冠版权或生变数
  3. AWS(EC2)助我实现项目管理应用上云
  4. 分享一个源代码:微信电影票预订(微信小程序版)
  5. 使用高德地图绘制矩形网格,显示行政区域。
  6. 在C#中实现SQLite的事务处理
  7. hexo+github创建个人博客--深入篇
  8. level2买股技巧_谈谈LEVEL2
  9. level2买股技巧_同花顺level2使用技巧
  10. 基于L298N的微型直流电机的控制课程设计报告