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

news2024/10/6 22:25:29

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

<?PHP
  header("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';
    }
}  

?>

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1257849.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

前置任务之安装jdk

已经安装过很多次了&#xff0c;但是每次安装都要搜好几次才能找到正确的&#xff0c;离大谱。 1.打开 oracle官网 https://www.oracle.com 然后切换到Java archive 下载192版本的&#xff0c;页面搜索ctrlF&#xff0c;【Java SE Development Kit】或者【jdk-8u192-windows-…

低代码开发平台:构建企业数字化生态系统的关键利器

近年来&#xff0c;随着人工智能、大数据分析技术、云计算等领域的迅速发展&#xff0c;企业数字化转型已成为不可避免的趋势。政策层面也对这一转型给予了大力支持&#xff0c;通过多项举措推动技术创新、信息化应用和数字化产业的发展。然而&#xff0c;我们要清醒认识到&…

不会提问不打紧,不敢提问才要命

最近在星球里回答了球友提出来的一些问题&#xff0c;我都给了回复&#xff0c;不经过在明确问题、探索问题的过程&#xff0c;对我启发挺大&#xff0c;特此来记录下感受和感悟。 缘起 最近新加入球友提的问题&#xff0c;有几次&#xff0c;我第一时间没看懂&#xff0c;甚…

Oracle Linux 9.3 发布

导读Oracle Linux 9 系列发布了第 3 个版本更新&#xff0c;支持 64 位 Intel 和 AMD (x86_64) 以及 64 位 Arm (aarch64) 平台。与所有的 Oracle Linux 版本一样&#xff0c;此版本与相应 RHEL 版本 100% 应用二进制兼容。 对于 x86_64 和 aarch64 架构&#xff0c;Oracle Li…

关于高斯核是实现尺度空间变换的唯一性思考

受到自己的启发&#xff0c;唯一性证明有了思路&#xff1a; 谁的一阶导数是自己&#xff0c;exp&#xff08;x&#xff09;&#xff0c;只有是自己&#xff0c;才能保持自己在其中。 为什么不能是exp&#xff08;x&#xff09;呢&#xff1f;不变导致图像不会模糊&#xff0…

微软发布了Orca 2,一对小型语言模型,它们的性能超越了体积更大的同类产品

尽管全球目睹了OpenAI的权力斗争和大规模辞职&#xff0c;但作为AI领域的长期支持者&#xff0c;微软并没有放慢自己的人工智能努力。今天&#xff0c;由萨提亚纳德拉领导的公司研究部门发布了Orca 2&#xff0c;这是一对小型语言模型&#xff0c;它们在零样本设置下对复杂推理…

基于PLC的物料分拣控制传送带控制系统设计

wx供重浩&#xff1a;创享日记 对话框发送&#xff1a;物料分拣 获取完整论文报告PLC梯形图工程源文件 传送带在先进制造领域中扮演着极其重要的角色。它可以搬运货物、分拣物品、代替人的繁重劳动。可以实现生产的机械化和自动化&#xff0c;能在有害环境下操作以保护人身安全…

条形码格式

条形码格式 简述EAN码EAN-13EAN-8 UPC码UPC-AUPC-E 简述 EAN码 EAN码&#xff08;European Article Number&#xff09;是国际物品编码协会制定的一种全球通用的商用条码。EAN码分为&#xff1a;标准版&#xff08;EAN-13&#xff09; 和 缩短版&#xff08;EAN-8&#xff09…

Eolink 通过多项信创环境适配认证,信创生态兼容更全面!

近日&#xff0c;Eolink 通过海光、龙芯、统信、达梦以及 TiDB 数据库等多个兼容性认证&#xff0c;信创生态适配能力全面提升。 信息技术应用创新的自主可控是国家实现科技自立自强的一项重要发展战略。作为国内 API 全生命周期管理理念的先行者&#xff0c;Eolink 积极响应国…

Java学习路线第一篇:Java基础(2)

这篇则分享Java学习路线第一part&#xff1a;Java基础&#xff08;2&#xff09; 从看到这篇内容开始&#xff0c;你就是被选定的天命骚年&#xff0c;将承担起学完Java基础的使命&#xff0c;本使命为单向契约&#xff0c;你可选择YES或者选择YES。 具体路线安排&#xff1a…

位图/布隆过滤器+海量数据处理总结

位图 题目&#xff1a; 第一种方法&#xff1a;二分查找。虽然二分的时间复杂度为o(log n),但是这个方法是不可行的&#xff0c;我们就算假设这40亿个数据是已经排序完成了的数据&#xff0c;但是40亿个整数在内存需要消耗的内存就是差不多16G&#xff0c;这个消耗是非常巨大的…

Java实现集合和Excel文件相互转换

目录 一、集合转化为Excel文件二、Excel文件转化为集合 一、集合转化为Excel文件 效果如下&#xff0c;是将集合转化为Excel文件&#xff0c;Excel包含合并单元格。 实体类&#xff1a; Data public class ClassGrade {/** 年级 */private String grade;/** 班主任 */privat…

其利天下技术总监冯建武受邀出席“2023年电子工程师大会”并作主题演讲

2023年11月23日&#xff0c;由华秋电子发烧友主办的“2023年电子工程师大会暨第三届社区年度颁奖活动”在深圳新一代产业园成功举行。本次年度颁奖活动邀请了高校教授、企业高管、行业专家、资深电子工程师等共300多人出席。聚焦“电机驱动技术”、“开源硬件”、“OpenHarmony…

sCrypt 在英国伦敦 Exeter 大学讲学

6月5日&#xff0c;sCrypt CEO晓晖和他的两位同事在英国伦敦Exeter大学举行了一场精彩的讲座。刘晓晖向听众们详细介绍了sCrypt智能合约开平台&#xff0c;并演示了如何使用sCrypt来开发基于比特币的智能合约。他用生动形象的语言&#xff0c;深入浅出地解释了这个领域复杂而又…

三方支付接口成为了电商竞争力的新动力

在当前快速发展的互联网时代&#xff0c;随着电子商务行业的兴起&#xff0c;支付体验已经成为企业获取竞争优势的重要因素。一个快速、安全、便捷的支付环节不仅可以提升用户的体验&#xff0c;还能有效促进交易的完成。在众多支付解决方案中&#xff0c;三方支付接口因其独特…

家用净水器产业分析:预计2029年将达到293亿美元

近年来&#xff0c;政府陆续出台了一系列鼓励居民安装家用净水器的政策措施。这些政策不仅提高了消费者的购买积极性&#xff0c;还促进了相关企业的研发和生产。此外&#xff0c;各级媒体也对家用净水器的重要性进行广泛宣传&#xff0c;增加了公众的认知度和接受度。 随着科技…

动起来,数据不散漏:上海迅软DSE助您解锁员工外带电脑信息安全新境界!

笔记本电脑作为企业数据泄密主要的途径之一&#xff0c;当员工携带着存放企业重要技术资料的笔记本在外办公时&#xff0c;很容易由于频繁的流动性让数据面临着丢失、恶意泄密等巨大风险&#xff0c;对此企事业单位需要通过一定的管理手段加以安全防护管控。 迅软DSE解决方案 一…

2023年双十二超声波清洗机如何选?有哪些值得购买的超声波清洗机?

通过眼科医院对近视眼统计报告说明&#xff0c;截止2023年3月27日&#xff0c;全国近视眼人数为3亿人&#xff0c;其中青少年近视约为2亿人&#xff0c;现在大部分人都离不开眼镜&#xff0c;也有很多人忽视了清洗眼镜的重要性&#xff0c;眼镜长时间的不清洗的话会很容易导致脸…

基于acme免费申请泛域名证书

参考文档&#xff1a;https://github.com/acmesh-official/acme.sh 文章目录 step1: 获取阿里云的ak、skstep2: 安装acmestep3: 安装通配符证书step4: 查看证书step5: 证书的使用step6: 删除证书 step1: 获取阿里云的ak、sk export Ali_Key"LTAI5tG8888888CDoEjLzkE"…

Grabcut算法在图片分割中的应用

GrabCut算法原理 Grabcut是基于图割(graph cut)实现的图像分割算法&#xff0c;它需要用户输入一个bounding box作为分割目标位置&#xff0c;实现对目标与背景的分离/分割&#xff0c;与KMeans与MeanShift等图像分割方法不同。 Grabcut分割速度快&#xff0c;效果好&#xff0…