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函数会一直读取客户端数据,直到遇见\n,\t或者\0字符.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."\r\n";
                echo "-----\r\n";
                
           }
        }
    }

    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."\r\n";
    }
    
    //shmop_close($systemid);//关闭共享内存
    //break;
    sleep(1);
}

 

posted @ 2017-02-23 15:31  zbchls  阅读(285)  评论(0编辑  收藏  举报