最近遇到一个socke udp协议通讯的需求,而且是16进制数据接收。这样在传输参数的时候老是提示参数错误,因为计算机是不能直接传输16进制的,会自行转换,所有以下代码非常完美的解决我的问题,同时也让我认识到并不是所有socket都是需要一个客户端和服务端代码

  1. <?php
  2.         $sendStr = '01 49 03 01 01 00 4B';  // 16进制数据01 49 03 01 01 00 4B
  3.         $sendStrArray = str_split(str_replace(' ', '', $sendStr), 2);  // 将16进制数据转换成两个一组的数组
  4.         $socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
  5.         // $socket = socket_create(AF_INET, SOCK_STREAM, getprotobyname("udp"));  // 创建Socket
  6.         if (socket_connect($socket, "192.168.16.254", 8080)) {  //连接
  7.             for ($j = 0; $j < count($sendStrArray); $j++) {
  8.                 socket_write($socket, chr(hexdec($sendStrArray[$j])));  // 逐组数据发送
  9.             }
  10.             $receiveStr = "";
  11.             $receiveStr = socket_read($socket, 1024, PHP_BINARY_READ);  // 采用2进制方式接收数据
  12.             $receiveStrHex = bin2hex($receiveStr);  // 将2进制数据转换成16进制
  13.             echo "client:" . $receiveStrHex;
  14.         }
  15.         socket_close($socket);  // 关闭Socket
  16.         ?>

运行文件返回如图所示

以下是两个文件的通讯案例,分别是udp_s.php和udp_c.php分别是服务端和客户端

udp_s.php文件

  1. <?php
  2.  error_reporting( E_ALL );
  3. set_time_limit( 0 );
  4. ob_implicit_flush();
  5. $socket = socket_create( AF_INET, SOCK_DGRAM, SOL_UDP );
  6. if ( $socket === false ) {
  7.   echo "socket_create() failed:reason:" . socket_strerror( socket_last_error() ) . "\n";
  8. }
  9. $ok = socket_bind( $socket, '127.0.0.1', 8080 );
  10. if ( $ok === false ) {
  11.   echo "socket_bind() failed:reason:" . socket_strerror( socket_last_error( $socket ) );
  12. }
  13. while ( true ) {
  14.   $from = "";
  15.   $port = 0;
  16.   socket_recvfrom( $socket, $buf,1024, 0, $from, $port );
  17.   echo $buf;
  18.   usleep( 1000 );
  19. }

udp_c.php文件

  1. <?php
  2. $sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
  3. $msg = "hello";
  4. $len = strlen($msg);
  5. socket_sendto($sock, $msg, $len, 0, '127.0.0.1', 8080);
  6. socket_close($sock);

运行文件如下,没刷新下udp_test.php文件,cmd打印出一个hello

门禁系统socket通讯编程的更多相关文章

  1. Java 并发专题 : CyclicBarrier 打造一个安全的门禁系统

    继续并发专题~ 这次介绍CyclicBarrier:看一眼API的注释: /** * A synchronization aid that allows a set of threads to all ...

  2. CCF系列之门禁系统(201412-1)

    试题编号:201412-1试题名称:门禁系统时间限制: 2.0s内存限制: 256.0MB 问题描述 涛涛最近要负责图书馆的管理工作,需要记录下每天读者的到访情况.每位读者有一个编号,每条记录用读者的 ...

  3. CCF CSP 201412-1 门禁系统

    题目链接:http://118.190.20.162/view.page?gpid=T21 问题描述 试题编号: 201412-1 试题名称: 门禁系统 时间限制: 1.0s 内存限制: 256.0M ...

  4. 利用Teensy进行em410x卡模拟以及暴力破解em410x类门禁系统

    什么是低频?什么是EM410x? 首先,我不得不再次提一下那些工作在125khz频率下的低频卡(如:EM410X之类的),以便大家更好的阅读以下的内容. 什么是低频?以下就是低频的解释: 低频(LF, ...

  5. CCF201412-1 门禁系统

    试题编号: 201412-1 试题名称: 门禁系统 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 涛涛最近要负责图书馆的管理工作,需要记录下每天读者的到访情况.每位读者有一个 ...

  6. ch1_6_6求解门禁系统问题

    import java.util.HashMap; import java.util.Scanner; public class ch1_6_6求解门禁系统问题 { public static voi ...

  7. 基于51,人体红外感应和RC522的门禁系统

    总结一下最近学的东西,这两天学的东西,rfid门卡系统终于弄出来来了,这个程序算现在写过的比较满意的程序,大家可以参考参考 主函数: #include<reg52.h> #include& ...

  8. 初识Socket通讯编程(一)

    一.什么是socket? 当两台计算机需要通信的时候,往往我们使用的都是TCP去实现的,但是并不会直接去操作TCP协议,通常是通过Socket进行tcp通信.Socket是操作系统提供给开发者的一个接 ...

  9. linux系统socket通信编程实践

    简单介绍并实现了基于UDP(TCP)的windows(UNIX下流程基本一致)下的服务端和客户端的程序,本文继续探讨关于UDP编程的一些细节. 下图是一个简单的UDP客户/服务器模型: 我在这里也实现 ...

随机推荐

  1. 《DSP using MATLAB》Problem 3.17

    用差分方程两边进行z变换,再变量带换得到频率响应函数(或转移函数,即LTI系统脉冲响应的DTFT). 代码: %% ------------------------------------------ ...

  2. adnanh webhook 框架execute-command 以及参数传递处理

      adnanh webhook是一个很不错的webhook 实现,方便灵活. adnanh webhook 支持以下功能: 接收请求 解析header 以及负载以及查询变量 规则检查 执行命令 下面 ...

  3. 【jmeter】jmeter之-聚合点

    集合点:简单来理解一下,虽然我们的“性能测试”理解为“多用户并发测试”,但真正的并发是不存在的,为了更真实的实现并发这感念,我们可以在需要压力的地方设置集合点, 还拿那个用户和密码的地方,每到输入用户 ...

  4. ES之八:elasticsearch2.x下的JAVA API示例

    D:\soft\elasticsearch\elasticsearch-2.1.0\lib package com.dxz.es; import java.net.InetAddress; impor ...

  5. TMOD

    1. • tag/itemlist {{Syntax Error}} Debug info: Unexpected token else Waiting... Debug info: node D:/ ...

  6. [转]NSIS:常量大全

    原文链接 http://www.flighty.cn/html/bushu/20140915_251.html ;轻狂志www.flighty.cn ;运行后会在桌面生成NSIS常量大全.txt文件 ...

  7. shell_sctipts: 删除mysql备份到最后7日

    目前,mysql的备份文件,经过一周左右清理,手动清理会比较费事,所以写了一个简单脚本来实现. 前提介绍: mysql备份文件放在/usr/bak/sql里面,sql文件的备份名称格式为: mysql ...

  8. python selenium-2 定位元素

    元素 方法 示例 id find_element_by_id('su') driver.get("http://www.baidu.com")driver.find_element ...

  9. 从Tomcat无法正常关闭讲讲Java线程关闭问题【转载】

    正常情况下,会优先采用catalina.sh stop来停止Tomcat实例,这样可以让服务有机会处理完请求,并做好善后工作. 但如果通过catalina.sh stop命令无法关闭Tomcat实例, ...

  10. matplot 代码实例

    matplot 代码实例 #!/usr/bin/env python # coding=utf-8 import numpy as np import matplotlib.pyplot as plt ...