zoukankan      html  css  js  c++  java
  • 门禁系统socket通讯编程

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

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

    运行文件返回如图所示

    blob.png

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

    udp_s.php文件

    <?php
     error_reporting( E_ALL );
    set_time_limit( 0 );
    ob_implicit_flush();
    $socket = socket_create( AF_INET, SOCK_DGRAM, SOL_UDP );
    if ( $socket === false ) {
      echo "socket_create() failed:reason:" . socket_strerror( socket_last_error() ) . "
    ";
    }
    $ok = socket_bind( $socket, '127.0.0.1', 8080 );
    if ( $ok === false ) {
      echo "socket_bind() failed:reason:" . socket_strerror( socket_last_error( $socket ) );
    }
    while ( true ) {
      $from = "";
      $port = 0;
      socket_recvfrom( $socket, $buf,1024, 0, $from, $port );
      echo $buf;
      usleep( 1000 );
    }

    udp_c.php文件

    <?php
    $sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
    $msg = "hello";
    $len = strlen($msg);
    socket_sendto($sock, $msg, $len, 0, '127.0.0.1', 8080);
    socket_close($sock);

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

    blob.png

  • 相关阅读:
    边推改革边上“保险” 央行“双降”两大亮点带来哪些变化
    今天走势将冲高回落后重新回归下跌周期
    小心!资本正在流出中国:国际收支表里被遗漏的-2547亿美元
    价格改革确立时间表和路线图 六大重点领域破题
    避免在办公室体重上升的三大良策
    别再说自己有多忙
    沪指可能展开一波3个交易日的调整
    专车新政博弈 垄断行业改革样本
    JS和CS互访【后台前台代码调用JavaScript变量以及JavaScript调用代码变量】
    net9:图片文件转换成二进制流存入SQL数据库,以及从数据库中读取二进制流输出文件
  • 原文地址:https://www.cnblogs.com/liliuguang/p/9914793.html
Copyright © 2011-2022 走看看