id读卡器 mysql_RFID设备管理C#客户端学习笔记之4:更新数据库

article/2025/1/11 0:42:37

事实上,前面的客户端是不够完善的,我们要自动获取IP,还要从数据库中选择工作人员。

除此之外手动控制服务器关闭也是有必要的……像下图所示的效果:

2f5f52bbebff1c1c3f28ccbedf7c0758.png

图1  收到读写器的消息之后立即插入到数据库

1d90fce6cd7ff0fb24f19c2b3750c171.png

图2 开启、打开服务器

1、获取当前主机IP地址

/// 

/// 获取本机地址列表

/// 

public List GetLocalAddresses()

{

// 获取主机名

string strHostName = Dns.GetHostName();

// 根据主机名进行查找

IPHostEntry iphostentry = Dns.GetHostEntry(strHostName);

List iplist = new List();

foreach (IPAddress ipaddress in iphostentry.AddressList)

{//过滤IPv6地址

if (ipaddress.ToString().Length 

{

iplist.Add(ipaddress.ToString());

}

}

return iplist;

}

启动时调用

//为cb_ips添加本地ip

List IPs = GetLocalAddresses();

if (IPs.Count() > 0)

{

this.cb_IPs.Items.Clear();

foreach (var i in IPs)

{

cb_IPs.Items.Add(i);

}

cb_IPs.SelectedIndex = 0;

}

2、查询“人员表”,添加到ComboBox中

2.1 rfid_DBHelper.cs(调用了MySqlHelper.cs,源码)

/// 

/// 自己定制一些增删改查功能

/// 

public abstract class rfid_DBhelper

{

static string connectionString =

"Database='rfid2';Data Source='localhost';User Id='uid';Password='psd';charset='utf8';pooling=true";

/// 

/// 获取下拉列表的dataset

/// 

/// dataset

public static DataSet getComboBox()

{

//Debug.WriteLine("【dbhelper】");

string sql = "select * from tb_people";

DataSet ds = MySqlHelper.GetDataSet(connectionString, CommandType.Text, sql, null);

return ds;

}

/// 

/// 插入数据到iohistory中

/// 

/// 

/// 

/// 

/// 受影响的行数

public static int insert_iohistory(string epc, int hander, DateTime dt)

{

string sql =

string.Format("insert into tb_iohistory(tagID,hander,occorTime) values('{0}','{1}','{2}')", epc, hander, dt);

Debug.WriteLine(sql);

return MySqlHelper.ExecuteNonQuery(connectionString, CommandType.Text, sql, null);

}

}

2.2 HandleFeedback.cs

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Diagnostics;

using System.Collections;

namespace Ex02_wifiServer

{

public class HandleFeedback

{

public string type { get; set; }//指令类型

List devices = new List();

public void processDevIO(out bool isOK, string code, string h = "1001")

{

//识别失败回:(E4 04 82)头,(00 )usercode (05)Status ,( 91)Checksum

//识别成功回:(E0 10 82)头,(00 )usercode (01)天线号 ,(12 34 00 00 00 00 00 00 00 00 00 10)ID,(37)Checksum

string[] strs = code.Split(' ');

int hander = Convert.ToInt32(h);

DateTime datetime = DateTime.Now;

if (strs[4] == "05")

{

Debug.WriteLine("【handle feedback】识别失败。");

isOK = false;

return;

}

else

{

StringBuilder epc = new StringBuilder();

//1、只选择EPC区,12个字节

epc.Append(strs[5]);

for (int i = 6; i 

{

epc.Append(' ' + strs[i]);

}

Debug.WriteLine("【handle feedback】{0},{1},{2}", epc, hander, datetime);//test ok

if (rfid_DBhelper.insert_iohistory(epc.ToString(), hander, datetime) != 0)

{

//插入成功

isOK = true;

//插入过程除了点问题,暂时删除外键

//ALTER TABLE `tb_iohistory` DROP FOREIGN KEY `fk_io_tag`;

}

else

{

isOK = false;

}

return;

}

}

}

}

2.3 调用

//动态绑定cb_people下拉列表

cb_people.DataSource = rfid_DBhelper.getComboBox().Tables[0];

cb_people.ValueMember = "personID";

cb_people.DisplayMember = "Name";

3、手动开启和关闭服务器端程序

开启服务器按钮调用StartServer(),关闭服务器按钮调用StopServer()

/// 

/// 启动服务器

/// 

private void ServerStart()

{

data = "等待用户连接……\n";

richTextBox1.AppendText(data);

richTextBox1.Focus();

toolStripStatusLabel1.Text = DateTime.Now + ":服务器已经打开";

btn_start.Enabled = false;

btn_stop.Enabled = true;

//定义线程开始

server_socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

IPAddress ipadd = IPAddress.Parse(server_ip);

IPEndPoint ipe = new IPEndPoint(ipadd, server_port);

try

{

server_socket.Bind(ipe);

server_socket.Listen(100);

}

catch (Exception ee)

{

MessageBox.Show(ee.Message);

return;

}

server_thread = new Thread(Run);

//后台线程将会随着主线程的退出而退出

server_thread.IsBackground = true;

server_thread.Start(server_socket);

}

/// 

/// 关闭服务器

/// 

private void ServerStop()

{

try

{

toolStripStatusLabel1.Text = DateTime.Now+":服务器已经关闭";

richTextBox1.AppendText("服务器已经关闭\n");

btn_start.Enabled = true;

btn_stop.Enabled = false;

//注意先关闭socket,再停止线程

foreach (var i in dicSocket)

{

i.Value.Close();

}

foreach (var i in dicThread)

{

i.Value.Abort();

}

server_socket.Close();

server_thread.Abort();

}

catch (Exception ex)

{

toolStripStatusLabel1.Text = "关闭出现异常:" + ex;

throw;

}

}

4、RFID读写器读到的结果插入到数据库

在RecMsg(object o)中添加

//交给HandleFeedback去处理

bool isInsertOK = false;

HandleFeedback hander = new HandleFeedback();

hander.processDevIO(out isInsertOK, str, worker);

if (isInsertOK)

{

toolStripStatusLabel1.Text = "添加事件成功";

}

else

{

toolStripStatusLabel1.Text = "添加事件失败";

}

其中str是接收到的字符串。


http://chatgpt.dhexx.cn/article/SoHIlY3s.shtml

相关文章

苹果7信号天线内部位置_苹果7信号天线内部位置_除了芯片还有天线!手机后壳换玻璃也是为5G准备...

此前,以iPhone为代表的智能手机,大多数以金属后盖为主,只有少数使用玻璃和树脂等材料的,但是从iPhoneX开始,各家似乎又重新用回了玻璃作为机身材料。今年发布的机器除了红魔和黑鲨两个游戏手机之外,几乎全都…

工业级无线路由器无线客户端的配置教程

本文以佰马工业级无线路由器BMR200-A为例,重点介绍路由器作为无线客户端进行配置的步骤,从而实现在不插SIM卡,不使用有线连接的方法下,实现WIFI覆盖。 佰马工业级无线路由器,广泛应用于电力、交通、环保等行业,实现数据远程采集、无线传输、物联网/互联网接入、无线上网…

无线射频专题《无线局域网排错,第二层重传问题6@客户端与接入点的功率不匹配》

一个经常被忽略的导致第2层重传的原因是接入点和客户端之间的功率设置不匹配。如果客户端发射功率小于接入点传输功率,通信可能发生故障。当客户端移到覆盖蜂窝的外边缘处,客户端可以“听”到接入点,然而,接入点无法“听”到客户端。如图12-1…

树莓派4外置wifi天线_「玩转树莓派」树莓派 3B+ 配置无线WiFi

前言 网线不方便还花钱,有自带的无线 WiFi 模块为啥不用,未来是属于5G的。 网络模式 这里我们先介绍两种网络模式,WPA-Personal 与 WPA-Enterprise。 WPA-Personal 大多数家庭网络属于这种模式,当在无线路由器或接入点(AP)上设置密码时,用户在连接到Wi-Fi网络时必须输入…

3.4-3.8GHz 5G LTE CBRS频段天线解决方案

超薄MiMo 3.6 / 5GHz天线 超薄-115mm(d)x 30mm(h)高达4 x 4 MiMo双频段专用LTE / CBRS通过EN45545-2认证通过EN501 55认证通过IP69K和IK10认证 虹科CM [X] -36-55系列的设计旨在以超薄型封装为专用LTE / CBRS提供MiMo双频3.6 /…

树莓派4外置wifi天线_只需25美元,算力提升3倍:树莓派4计算模组上线

一年多之后,工业界开发者们终于等来了树莓派 4 的计算模组,即简装版树莓派 4 Model B。 机器之心报道,编辑:泽南、蛋酱。 对于每一代嵌入式电脑树莓派(Raspberry Pi)来说,官方都会在基础版推出一段时间后发布同架构的计算模组。树莓派 1 的计算模组在 2014 年推出,树莓…

真实地图最短路径规划(A*算法)

本文将研究矢量地图以及A*算法等系统关键的技术支持。在实现的过程中,还引入了高德出行API、聚焦类爬虫、OpenStreetMap开源地图,二叉堆等技术。 通过解析OpenStreetMap提供的地图数据,获取不同类型的交通路网信息。然后将A*算法应用于路网数…

OpenLayers入门,使用OpenLayers叠加多边形、圆形、线段和点要素到地图上

专栏目录: OpenLayers入门教程汇总目录 前言 本章详细介绍一下如何使用OpenLayers叠加多边形、圆形、线段和点要素到地图上,并设置样式。 要叠加这些元素到地图上,首先要理解OpenLayers的结构。就如同photoshop这些图像编辑软件和游戏引擎一样,OpenLayers是基于图层(laye…

unity+高德定位=pokemon go 山寨demo安卓版

这两周尝试了下用高德地理定位和Unity来做个山寨的pokemon go的demo,只能在安卓下使用。 游戏过程视频: http://www.bilibili.com/video/av6836823/ apk下载: http://download.csdn.net/detail/wuyt2008/9665294 源码下载: h…

腾讯位置服务开发应用-使用教程,案例分享,知识总结

文章目录 前言一、腾讯位置服务是什么?二、使用步骤1.uniapp开发map说明介绍markers属性-类型为数组Arraymarker 上的气泡 callout(Object类型)marker 上的标签 label(Object类型)polylinepolygoncirclescontrolsposit…

Unity基于GPS获取当前位置并将地图瓦片置于一个平面上

unity版本:2019.1.0f2 1.需要高德地图的key,去官网搞一个就行->高德的静态地图教程 2.然后将脚本挂在一个plane(Map_Tile)上就行了 3.加一个button,并将Onclick设置为下面的样子就完事了,然后导出&#…

微信小程序获取地理位置失败原因及解决方案

微信小程序获取用户地理位置失败的原因主要有3种情况: 1. 手机系统设置中地理位置未开启 2. 系统未给微信app授权 3. 用户未给小程序授权地理位置信息 所以需要继续完善下定位失败的处理逻辑。 1. 在获取地理位置信息失败后,首先判断用户手机系统定位服务…

百度、高德、腾讯、天地图、谷歌、必应地图切片切图工具 MapCutter(旧名MapTiler),支持超大图、高清切片、webgl、leaflet、maptalk、openlayers、cesium等

# MapCutter MapCutter 是制作覆盖图/瓦片图/金字塔图/游戏地图/切图切片的工具,它支持百度、腾讯、高德、天地图、谷歌、必应地图、MapBox等地图服务,是市面上最易用的同类软件,并支持js、webgl、leaflet、maptalks、openlayers、cesium 等…

java获取输入的地点的经纬度和编码等信息

我的苦衷 对于不规则,无序的数据做数据清洗,使之可以在GIS地图上展示出来数据。在地图上展示出来倒是不难,难的是如何对这些不规则,无序的数据做数据清洗,拿到每个的经纬度呢? 原始数据分析 数据清洗后的数据都有公司名称,还有地点,能到区。那这个就好办了。 既然我…

视频教程-Web前端开发仿美团/饿了吗移动App之高德地图接口对接案例-JavaScript

Web前端开发仿美团/饿了吗移动App之高德地图接口对接案例 互联网编程行业10年开发和授课经验 曾任太极集团,外资企业等一线互联网python高级开发工程师 现任聚焦计算机技术有限公司项目组担任架构师及项目经理 精通:python/php/web前端开发技术以及unity…

大数据之数据清洗之爬取数据后如何根据地名或者公司名获取经纬度信息-地址逆解析经纬度

关于本文章说明: 本文章的想法来源于:爬了大量的数据后,想利用GIS技术把数据展示在地图上。但是爬的数据又没有经纬度坐标,就无法在地图上进行展示了,所以用了百度地图的正/逆地理编码。计算机行业招聘智能分析平台效果

微信小程序地图获取地点信息(打卡签到功能为例)-2020-7-26

目录 微信小程序地图获取地点信息(打卡签到功能为例) 效果图前提步骤 首先需要了解的代码部分 配置性代码功能性代码demo 下载 微信小程序地图获取地点信息(打卡签到功能为例) 解决方案:利用微信小程序的地图组件获取到用户的地理位置信息(经纬度),再通过…

IOS高德地图逆地理编码定位+网络判断

先说下这功能的流程, 流程:判断用户是否联网--->获取用户地理位置经纬度--->通过经纬度去查询地理位置名称 //高德地图 property (nonatomic, strong) MAMapView *mapView;//高德地图 property (nonatomic, strong) AMapSearchAPI *search; property(nonatom…

如何制作专业的手绘地图(电子地图、智慧导览系统)

一、智慧导览系统介绍 手绘电子地图,就是把手绘地图覆盖到地图上,游客或者普通用户,可以在手机上通过地图的链接(或者现在流行的小程序)打开使用。是一种使用非常方便,集**“视、听、路径规划、实时导航”*…

js技术调用高德api实现精准定位

我先说下写这个程序的起因,昨天晚上我的一个朋友在淘宝上卖它玩了两年的光遇号。 号给淘宝商家了就不理人也不给钱了,因为没有订单记录淘宝官方不管。这种回收游戏账号的微信账号的十有九骗。在黑猫上就能查到各种回收账号的诈骗案件。 于是我给我朋友写…