zoukankan      html  css  js  c++  java
  • php 共享内存

    <?php
    date_default_timezone_set("Asia/Shanghai");
    global $val;  
    set_time_limit(0);  
    //设置IP和端口号  
    $address = "192.168.19.254";  
    $port = 60000;  
    
    $sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP) or die("socket_create() 失败的原因是:" . socket_strerror(socket_last_error()) . "/n");  
    //阻塞模式  
    socket_set_block($sock) or die("socket_set_block() 失败的原因是:" . socket_strerror(socket_last_error()) . "/n");  
    //绑定到socket端口  
    $result = socket_bind($sock, $address, $port) or die("socket_bind() 失败的原因是:" . socket_strerror(socket_last_error()) . "/n");  
    //开始监听  
    $result = socket_listen($sock) or die("socket_listen() 失败的原因是:" . socket_strerror(socket_last_error()) . "/n");  
    
    //将数据写入共享内存,供客户端请求
    $systemid=864;
    $mode="c";
    $permission=0755;
    $size=128;
    $shmid=shmop_open($systemid,$mode,$permission,$size);//打开内存
    $size=shmop_size($shmid);
     
    do { 
        //它接收连接请求并调用一个子连接Socket来处理客户端和服务器间的信息  
        $msgsock = socket_accept($sock) or  die("socket_accept() failed: reason: " . socket_strerror(socket_last_error()) . "/n");  
        //socket_read函数会一直读取客户端数据,直到遇见
    ,	或者字符.PHP脚本把这写字符看做是输入的结束符.  
        $buf = @socket_read($msgsock, 2048);
        if($buf){
                //客户端发来的字符串长度 
            $len=strlen($buf);
            if($len>0){
                echo $len."--arduino--".$buf;
                
                //截取字符串,如果前五位是"value" (Arduino 客户端发来的数据)
                $str=substr($buf, 0,5);
                if($str=="value"){
                    echo ("--write--".date("H:i:s").$buf);//打印出Arduino发来的数据
                    //socket_write($msgsock,"1");
                    //删除内存
                    //shmop_delete($shmid);
                    //写入内存
                    $data=substr($buf,0,52);
                    shmop_write($shmid,$data,0);
    
                    $dongle=shmop_read($shmid,0,$size);
                    echo "--read--".$dongle."
    ";
                    echo "-----
    ";
                    
               }
            }
        }
    
        socket_close($msgsock); 
        sleep(1); 
    } while (true);  
    socket_close($sock); 

     下面是客户端 读取共享内存的代码

    <?php
    date_default_timezone_set("Asia/Shanghai");
    set_time_limit(0);  
    
    while(true){
        $systemid=864;
        $mode="c";
        $permission=0755;
        $size=128;
        $shmid=shmop_open($systemid,$mode,$permission,$size);//打开内存
        $size=shmop_size($shmid);
        //读取共享内存
        $dongle=shmop_read($shmid,0,$size);
        //shmop_delete($shmid);
        if($dongle){
            echo $dongle."
    ";
        }
        
        //shmop_close($systemid);//关闭共享内存
        //break;
        sleep(1);
    }
  • 相关阅读:
    windows远程桌面
    Arch Linux 2012.07.15 放出
    smart archives reloaded 中文版
    Dan North谈误导的艺术
    猎豹浏览器官方下载
    Druid 不仅仅是一个数据库连接池
    仰观Java时代淘宝
    Office 2013 Preview 专业增强版下载!微软下一代办公套件,Win8式Metro风格清新界面
    常用排序算法
    OpenCV 卡尔曼滤波器的使用
  • 原文地址:https://www.cnblogs.com/yuanlipu/p/6433698.html
Copyright © 2011-2022 走看看