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

2023-11-28 06:45

本文主要是介绍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 双门双向门禁控制板实时监控源码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/429223

相关文章

使用Python和OpenCV库实现实时颜色识别系统

《使用Python和OpenCV库实现实时颜色识别系统》:本文主要介绍使用Python和OpenCV库实现的实时颜色识别系统,这个系统能够通过摄像头捕捉视频流,并在视频中指定区域内识别主要颜色(红... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间详解

OpenCV实现实时颜色检测的示例

《OpenCV实现实时颜色检测的示例》本文主要介绍了OpenCV实现实时颜色检测的示例,通过HSV色彩空间转换和色调范围判断实现红黄绿蓝颜色检测,包含视频捕捉、区域标记、颜色分析等功能,具有一定的参考... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间

JVisualVM之Java性能监控与调优利器详解

《JVisualVM之Java性能监控与调优利器详解》本文将详细介绍JVisualVM的使用方法,并结合实际案例展示如何利用它进行性能调优,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全... 目录1. JVisualVM简介2. JVisualVM的安装与启动2.1 启动JVisualVM2

8种快速易用的Python Matplotlib数据可视化方法汇总(附源码)

《8种快速易用的PythonMatplotlib数据可视化方法汇总(附源码)》你是否曾经面对一堆复杂的数据,却不知道如何让它们变得直观易懂?别慌,Python的Matplotlib库是你数据可视化的... 目录引言1. 折线图(Line Plot)——趋势分析2. 柱状图(Bar Chart)——对比分析3

使用Python实现实时金价监控并自动提醒功能

《使用Python实现实时金价监控并自动提醒功能》在日常投资中,很多朋友喜欢在一些平台买点黄金,低买高卖赚点小差价,但黄金价格实时波动频繁,总是盯着手机太累了,于是我用Python写了一个实时金价监控... 目录工具能干啥?手把手教你用1、先装好这些"食材"2、代码实现讲解1. 用户输入参数2. 设置无头浏

Android实现一键录屏功能(附源码)

《Android实现一键录屏功能(附源码)》在Android5.0及以上版本,系统提供了MediaProjectionAPI,允许应用在用户授权下录制屏幕内容并输出到视频文件,所以本文将基于此实现一个... 目录一、项目介绍二、相关技术与原理三、系统权限与用户授权四、项目架构与流程五、环境配置与依赖六、完整

Android实现定时任务的几种方式汇总(附源码)

《Android实现定时任务的几种方式汇总(附源码)》在Android应用中,定时任务(ScheduledTask)的需求几乎无处不在:从定时刷新数据、定时备份、定时推送通知,到夜间静默下载、循环执行... 目录一、项目介绍1. 背景与意义二、相关基础知识与系统约束三、方案一:Handler.postDel

使用Python实现IP地址和端口状态检测与监控

《使用Python实现IP地址和端口状态检测与监控》在网络运维和服务器管理中,IP地址和端口的可用性监控是保障业务连续性的基础需求,本文将带你用Python从零打造一个高可用IP监控系统,感兴趣的小伙... 目录概述:为什么需要IP监控系统使用步骤说明1. 环境准备2. 系统部署3. 核心功能配置系统效果展

Java 正则表达式URL 匹配与源码全解析

《Java正则表达式URL匹配与源码全解析》在Web应用开发中,我们经常需要对URL进行格式验证,今天我们结合Java的Pattern和Matcher类,深入理解正则表达式在实际应用中... 目录1.正则表达式分解:2. 添加域名匹配 (2)3. 添加路径和查询参数匹配 (3) 4. 最终优化版本5.设计思

AJAX请求上传下载进度监控实现方式

《AJAX请求上传下载进度监控实现方式》在日常Web开发中,AJAX(AsynchronousJavaScriptandXML)被广泛用于异步请求数据,而无需刷新整个页面,:本文主要介绍AJAX请... 目录1. 前言2. 基于XMLHttpRequest的进度监控2.1 基础版文件上传监控2.2 增强版多