php门禁系统开发,门禁系统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 

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

?>

运行文件返回如图所示

1489396097550565.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() ) . "\n";

}

$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

1489396255926283.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值