当前位置: 首页 > news >正文

PHP 双门双向门禁控制板实时监控源码

本示例使用设备: 实时网络双门双向门禁控制板可二次编程控制网络继电器远程开关-淘宝网 (taobao.com)

<?PHPheader("content-type:text/html;charset=GBK");$ThisIp=get_local_ip();   //获取电脑IP地址       $server = 'udp://'.$ThisIp.':39192';  $socket = stream_socket_server($server, $errno, $errstr, STREAM_SERVER_BIND);  if (!$socket) {  die("$errstr ($errno)");  }  echo "系统绑定的IP :".$ThisIp.":39192\n";    $LastFramesStr= "";      //保存最后接收到的信息,用于比较是否重复接收的信息  do{ //监听UDP端口,并将接收到的信息显示,正式项目只解析数据不需要显示$inMsg = stream_socket_recvfrom($socket, 1024, 0, $peer);        $Fields = explode(",",$inMsg );     //将接收到的信息 分字段解析echo "From Ip:".$peer."\n";echo "Getdata:".$inMsg."\n\n" ;switch($Fields[0]){case "100":    //*设备接收到000搜索指令后返回的设备信息*/if(sizeof($Fields)<9){                    $DevBufferIpAddrStr= $Fields[1];          /*终端IP*/$DevBufferMaskStr= $Fields[2];            /*掩码*/$DevBufferGatewayStr= $Fields[3];         /*网关*/$DevBufferRemoteAddrStr= $Fields[4];      /*远程服务器IP*/$DevBufferPort= $Fields[5];               /*端口*/$DevBufferNumberDecStr= $Fields[6];       /*设备序号*/}else{$DevBufferIpAddrStr= $Fields[1];          /*终端IP*/$DevBufferMaskStr= $Fields[2];            /*掩码*/$DevBufferGatewayStr= $Fields[3];         /*网关*/$DevBufferGatewayStrMAC= $Fields[4];      /*网关MAC*/$DevBufferRemoteAddrStr= $Fields[5];      /*远程服务器IP*/$DevBufferRemoteAddrMACStr= $Fields[6];   /*远程服务器IPMAC*/$DevBufferMACSearchStr= $Fields[7];       /*MAC搜索标识*/ $DevBufferPort= $Fields[8];               /*端口*/$DevBufferNumberDecStr= $Fields[9];       /*设备模块序号*/if(strArr.length>10){$DevBufferSerialNumStr= $Fields[10];  /*设备唯一硬件序号*/}if(strcmp($DevBufferRemoteAddrStr,"255.255.255.255")!=0 && strcmp($DevBufferRemoteAddrStr,$ThisIp)!=0 ){echo "消费机的远程服务器IP不是指向当前网卡,请在消费机上 功能1>\7IP地址及端口设定 设定正确的网络参数!\n\n";  }                   }break;            case "101":    ///*接收到设备的开的信号*/$DevRecFramesStr = $Fields[1];            /*包序列号 */$DevBufferIpAddrStr = $Fields[2];         /*终端IP  */$DevBufferRemoteAddrStr = $Fields[3];     /*远程电脑指机IP*/$DevBufferMachinStr = $Fields[4];         /*机号*/$DevBufferDatetimeStr = $Fields[5];       /*设备日期时间*/if(sizeof($Fields)>6){                    /*2018年以后的设备有唯一硬件序号*/$DevBufferSerialNumStr=$Fields[6];}$SendInfStr="001,".$DevRecFramesStr;      //确定接收到信息,否则设备会连续发送三次SendInfToIp($socket,$SendInfStr,$peer);          $GetDT=substr($DevBufferDatetimeStr,0,16);$SysDT=substr(date('Y-m-d H:i:s',time()),0,16);if (strcmp($GetDT,$SysDT)!=0){            /*设备时钟与系统不符,更新设备时间*/$SendInfStr="003," . $DevBufferMachinStr ."," . date('Y-m-d H:i:s', time());       SendInfToIp($socket,$SendInfStr,$peer);}break;            case "150":$DevRecFramesStr = $Fields[1];            /*包序列号 */$DevBufferIpAddrStr = $Fields[2];         /*终端IP  */$DevBufferRemoteAddrStr = $Fields[3];     /*远程电脑指机IP*/$DevBufferMachinStr = $Fields[4];         /*机号*/$DevBufferCardidStr = $Fields[5];         /*卡号*/$DevBufferReaderStr= $Fields[6];          /*读头号*/$DevBufferDoorNoStr= $Fields[7];          /*门或继电器号*/ $DevBufferDelayStr= $Fields[8];           /*门磁未关秒数,0表示已关*/ $DevBufferPasswPropStr= $Fields[9];       /*密码属性(0密码无效,1刷卡后按密码,2补签密码,3开门密码,4防迫胁密码)*/$DevBufferPassWStr= $Fields[10];          /*密码(最多8位数字)*/$DevBufferUseTimeStr= $Fields[11];        /*刷卡时间*/if(sizeof($Fields)>12){                   /*2018年以后的设备有唯一硬件序号*/$DevBufferSerialNumStr=$Fields[12];}$SendInfStr="001,".$DevRecFramesStr;      //确定接收到信息,否则设备会连续发送三次SendInfToIp($socket,$SendInfStr,$peer);          $LastFramesStr=$peer.$inMsg;              //将接收到的信息接保存,用于对比是否重复接收到的信息//可以在这里加上业务对数据库的查、增、删操作,要分析是否重复接收的信息//用050指令返回开门成功,//用051指令返回开门失败,正式系统开发时要有重发机制 *///$SendInfStr="051," . $DevBufferMachinStr . "," . $DevBufferCardidStr . ",卡号:" . $DevBufferCardidStr . "\\n姓名:张三丰  \\n状态:无效卡\\n,20,1,3"; $SendInfStr="050," . $DevBufferMachinStr . "," . $DevBufferCardidStr . ",卡号:" . $DevBufferCardidStr . "\\n姓名:张三丰  \\n状态:欢迎关临\\n,20,1,0," . $DevBufferReaderStr . "," . $DevBufferDoorNoStr . ",5,20" ; SendInfToIp($socket,$SendInfStr,$peer);default: //更多的字段信息及反馈指令,请仔细查看设备的通讯协议说明......}} while ($inMsg !== false);//判断字符串是否一个合法的日期时间--------------------------------------------------------------------------------------------------------
function CheckDateTime($data)
{if(date('Y-m-d H:i:s',strtotime($data))==$data){return true;}else{return false;} 
}
//确定接收到设备上传的数,以免设备重复发送--------------------------------------------------------------------------------------------------
function SendInfToIp($socket,$SendInfStr,$peer)
{stream_socket_sendto($socket,$SendInfStr,0,$peer); //$handle = stream_socket_client("udp://".$peer, $errno, $errstr);//fwrite($handle, $SendInfStr);  echo "SendTo IP:".$peer."\n";echo "SendInfor:{$SendInfStr}\n\n";      }        
//获取本机IP地址------------------------------------------------------------------------------------------------------------------------  
function get_local_ip()
{$preg = "/\A((([0-9]?[0-9])|(1[0-9]{2})|(2[0-4][0-9])|(25[0-5]))\.){3}(([0-9]?[0-9])|(1[0-9]{2})|(2[0-4][0-9])|(25[0-5]))\Z/";//获取操作系统为win2000/xp、win7的本机IP真实地址$Netdriv=array();exec("ipconfig", $out, $stats);if (!empty($out)) {foreach ($out AS $row) {if (strstr($row, "IP") && strstr($row, ":") && !strstr($row, "IPv6")) {$tmpIp = explode(":", $row);if (preg_match($preg, trim($tmpIp[1]))) {$Netdriv[]=trim($tmpIp[1]);echo trim($tmpIp[1])."\n";}}}}    //获取操作系统为linux类型的本机IP真实地址//exec("ifconfig", $out, $stats);//if (!empty($out)) {//    if (isset($out[1]) && strstr($out[1], 'addr:')) {//        $tmpArray = explode(":", $out[1]);//        $tmpIp = explode("", $tmpArray[1]);//        if (preg_match($preg, trim($tmpIp[0]))) {//            return trim($tmpIp[0]);//        }//    }//}if (!empty($Netdriv)) {return $Netdriv[0];   //如果有多张网块,可以修改数组取值来绑定相应的网卡}else{return '127.0.0.1';}
}  ?>

 

相关文章:

PHP 双门双向门禁控制板实时监控源码

本示例使用设备&#xff1a; 实时网络双门双向门禁控制板可二次编程控制网络继电器远程开关-淘宝网 (taobao.com) <?PHPheader("content-type:text/html;charsetGBK");$ThisIpget_local_ip(); //获取电脑IP地址 $server udp://.$ThisIp.:39192; $sock…...

【源码解析】聊聊线程池 实现原理与源码深度解析(二)

AbstractExecutorService 上一篇文章中&#xff0c;主要介绍了AbstractExecutorService的线程执行的核心流程&#xff0c;execute() 这个方法显然是没有返回执行任务的结果&#xff0c;如果我们需要获取任务执行的结果&#xff0c;怎么办&#xff1f; Callable 就是一个可以获…...

本地Lambda(SAM LI)+ MySQL(Docker)环境构筑注意点

目录构成 mysql8 ├─data ├─logs └─docker├─docker-compose.yml├─.env├─config└─my.cnf .env DB_NAMEtest_db ROOT_DB_PASSroot_password DB_USERtest_user DB_PASStest_password DB_PORT3306 TZAsia/Tokyo docker-compose.yml version: "3.6" ser…...

Windows下打包C++程序无法执行:无法定位程序输入点于动态链接库

1、问题描述 环境&#xff1a;CLionCMakeMinGW64遇到问题&#xff1a;打包的exe无法运行&#xff0c;提示无法定位程序输入点于动态链接库。 2、解决思路 ​ 通过注释头文件的方式&#xff0c;初步定位问题是因为使用了#include <thread> 多线程库引起的。而且exe文件…...

Android 12 打开网络ADB并禁用USB连接ADB

平台 RK3588 Android 12 Android 调试桥 (adb) Android 调试桥 (adb) 是一种功能多样的命令行工具&#xff0c;可让您与设备进行通信。adb 命令可用于执行各种设备操作&#xff0c;例如安装和调试应用。adb 提供对 Unix shell&#xff08;可用来在设备上运行各种命令&am…...

基于Langchain的txt文本向量库搭建与检索

这里的源码主要来自于Langchain-ChatGLM中的向量库部分&#xff0c;做了一些代码上的修改和封装&#xff0c;以适用于基于问题和包含数据库表描述的txt文件&#xff08;文件名为库表名&#xff0c;文件内容为库表中的字段及描述&#xff09;对数据库表进行快速检索。 中文分词…...

vue2-router

1.基础 1.1.安装 npm install vue-router3.6.5 1.2.引入 import VueRouter from "vue-router" 1.3.注册 Vue.use(VueRouter) 1.4.创建 const router new VueRouter({routes: [{path:/page1, page1},{path:/page2, page2}]} ) 1.5.引用 new Vue({render: h >…...

css新闻链接案例

利用html和css构建出新闻链接案例&#xff0c;使用渐变色做出背景色变化 background: linear-gradient(to bottom, rgb(137, 210, 251), rgb(238, 248, 254), white); 利用背景图片&#xff0c;调整位置完成 dd { height: 28px; line-height: 28px; background-image: url(./图…...

Android wifi连接和获取IP分析

wifi 连接&获取IP 流程图 代码流程分析 一、关联阶段 1. WifiSettings.submit – > WifiManager WifiSettings 干的事情比较简单&#xff0c;当在dialog完成ssid 以及密码填充后&#xff0c;直接call WifiManager save 即可WifiManager 收到Save 之后&#xff0c;就开…...

MLIR笔记(5)

4.3.4. 图区域 在MLIR中&#xff0c;区域里类似图的语义由RegionKind::Graph来表示。对没有控制流的并发语义&#xff0c;以及通用有向图数据结构的建模&#xff0c;图区域是合适的。图区域适用于表示耦合值之间的循环关系&#xff0c;这些关系没有基本的序。例如&#xff0c;…...

abapgit 安装及使用

abapgit 需求 SA[ BASIS 版本 702 及以上 版本查看路径如下&#xff1a; 安装步骤如下&#xff1a; 1. 下载abapgit 独立版本 程序 链接如下&#xff1a;raw.githubusercontent.com/abapGit/build/main/zabapgit_standalone.prog.abap 2.安装开发版本 2.1 在线安装 前置条…...

园区无线覆盖方案(智慧园区综合解决方案)

​ 李经理正苦恼头疼的工业园区数字化改造项目。近年企业快速增长,园区内Argent工业设备激增,IT部门应接不暇。为确保生产系统稳定运行,IT管理团队经过反复摸索,决定进行全面的数字化升级。然而改造之艰巨远超想象——混杂的接入环境、复杂的专线部署、长达数月的建设周期,种种…...

配置中心--Spring Cloud Config

目录 概述 环境说明 步骤 创建远端git仓库 准备配置文件 配置中心--服务端 配置中心--客户端 配置中心的高可用 配置中心--服务端 配置中心--客户端 消息总线刷新配置 配置中心--服务端 配置中心--客户端 概述 因为微服务架构有很多个服务&#xff0c;手动一个一…...

笔记-模拟角频率和数字角频率的关系理解

先建议阅读前人此文&#xff08;点击这里&#xff09;&#xff0c;有助于理解。 模拟频率&#xff1a;f 模拟角频率&#xff1a;Ω 数字角频率&#xff1a;ω 其中&#xff1a;在模拟信号中Ω 2πf 正弦波表示&#xff1a;sin(2πft) sin(Ωt) 数字信号就是离散的&#xff…...

Zookeeper+Kafka集群

注&#xff1a;本章使用的Kafka为2.7.0版本 Zookeeper概述 1.Zookeeper定义 Zookeeper是一个开源的分布式的&#xff0c;为分布式框架提供协调服务的Apache项目。 2.Zookeeper工作机制 Zookeeper从设计模式角度来理解&#xff1a;是一个基于观察者模式设计的分布式服务管理…...

Sunshine+Moonlight+Android手机串流配置(局域网、无手柄)

目录 前言Sunshine&#xff08;服务端&#xff09;ApplicationConfigurationGeneralAdvance Moonlight&#xff08;客户端&#xff09;配对打开虚拟手柄串流按键调整退出串流 原神&#xff0c;启动&#xff01; 前言 写这篇文章单纯是因为搜来搜去没有很符合我需求的教程&#…...

从顺序表中删除具有最小值的元素(假设唯一) 并由函数返回被删元素的值。空出的位 置由最后一个元素填补,若顺序表为空,则显示出错信息并退出运行。

题目描述&#xff1a;从顺序表中删除具有最小值的元素(假设唯一) 并由函数返回被删元素的值。空出的位置由最后一个元素填补&#xff0c;若顺序表为空&#xff0c;则显示出错信息并退出运行。 bool DeleteMin(SqList &L,int &min){if(L.length 0)return false;min L…...

详解—[C++ 数据结构]—AVL树

目录 一.AVL树的概念 二、AVL树节点的定义 三、AVL树的插入 3.1插入方法 四、AVL树的旋转 1. 新节点插入较高左子树的左侧---左左&#xff1a;右单旋 2. 新节点插入较高右子树的右侧---右右&#xff1a;左单旋 3.新节点插入较高左子树的右侧---左右&#xff1a;先左单旋…...

卷积神经网络(CNN):乳腺癌识别.ipynb

文章目录 一、前言一、设置GPU二、导入数据1. 导入数据2. 检查数据3. 配置数据集4. 数据可视化 三、构建模型四、编译五、训练模型六、评估模型1. Accuracy与Loss图2. 混淆矩阵3. 各项指标评估 一、前言 我的环境&#xff1a; 语言环境&#xff1a;Python3.6.5编译器&#xf…...

有文件实体的后门无文件实体的后门rootkit后门

有文件实体后门和无文件实体后门&RootKit后门 什么是有文件的实体后门&#xff1a; 在传统的webshell当中&#xff0c;后门代码都是可以精确定位到某一个文件上去的&#xff0c;你可以rm删除它&#xff0c;可以鼠标右键操作它&#xff0c;它是有一个文件实体对象存在的。…...

[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?

&#x1f9e0; 智能合约中的数据是如何在区块链中保持一致的&#xff1f; 为什么所有区块链节点都能得出相同结果&#xff1f;合约调用这么复杂&#xff0c;状态真能保持一致吗&#xff1f;本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里&#xf…...

mongodb源码分析session执行handleRequest命令find过程

mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程&#xff0c;并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令&#xff0c;把数据流转换成Message&#xff0c;状态转变流程是&#xff1a;State::Created 》 St…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述&#xff1a;iview使用table 中type: "index",分页之后 &#xff0c;索引还是从1开始&#xff0c;试过绑定后台返回数据的id, 这种方法可行&#xff0c;就是后台返回数据的每个页面id都不完全是按照从1开始的升序&#xff0c;因此百度了下&#xff0c;找到了…...

全球首个30米分辨率湿地数据集(2000—2022)

数据简介 今天我们分享的数据是全球30米分辨率湿地数据集&#xff0c;包含8种湿地亚类&#xff0c;该数据以0.5X0.5的瓦片存储&#xff0c;我们整理了所有属于中国的瓦片名称与其对应省份&#xff0c;方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...

在四层代理中还原真实客户端ngx_stream_realip_module

一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡&#xff08;如 HAProxy、AWS NLB、阿里 SLB&#xff09;发起上游连接时&#xff0c;将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后&#xff0c;ngx_stream_realip_module 从中提取原始信息…...

什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南

文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/55aefaea8a9f477e86d065227851fe3d.pn…...

优选算法第十二讲:队列 + 宽搜 优先级队列

优选算法第十二讲&#xff1a;队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent

安全大模型训练计划&#xff1a;基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标&#xff1a;为安全大模型创建高质量、去偏、符合伦理的训练数据集&#xff0c;涵盖安全相关任务&#xff08;如有害内容检测、隐私保护、道德推理等&#xff09;。 1.1 数据收集 描…...

Docker拉取MySQL后数据库连接失败的解决方案

在使用Docker部署MySQL时&#xff0c;拉取并启动容器后&#xff0c;有时可能会遇到数据库连接失败的问题。这种问题可能由多种原因导致&#xff0c;包括配置错误、网络设置问题、权限问题等。本文将分析可能的原因&#xff0c;并提供解决方案。 一、确认MySQL容器的运行状态 …...

消防一体化安全管控平台:构建消防“一张图”和APP统一管理

在城市的某个角落&#xff0c;一场突如其来的火灾打破了平静。熊熊烈火迅速蔓延&#xff0c;滚滚浓烟弥漫开来&#xff0c;周围群众的生命财产安全受到严重威胁。就在这千钧一发之际&#xff0c;消防救援队伍迅速行动&#xff0c;而豪越科技消防一体化安全管控平台构建的消防“…...