本文实例讲述了PHP实现连接设备、通讯和发送命令的方法。分享给大家供大家参考。具体如下:
开发的BS架构的软件(PHP),需要跟设备进行通讯,在此记录一下,欢迎各位指正:
参数$service_port 连接端口
参数$address 发送IP地址
参数$in 发送命令
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
function Send_socket_connect( $service_port , $address , $in ) {
//创建 TCP/IP socket$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP) or die("could not create socket!");
//设置超时时间
$timeout = 2;
$time = time();
//设置非阻塞模式
@socket_set_nonblock( $socket );
//超时判断
while (!@socket_connect( $socket , $address , $service_port )) {
$err = socket_last_error( $socket );
// 连接成功,跳出循环
if ( $err === 10056) {
break ;
}
//连接失败,判断超时时间,停止
if ((time() - $time ) >= $timeout ) {
socket_close( $socket );
print ( '网络异常,请检查网络连接!!' );
exit ();
}
// 刷新频率(250毫秒)
usleep(250000);
}
//设置阻塞模式
@socket_set_block( $socket );
//发送命令到设备
socket_write( $socket , $in , strlen ( $in ));
//关闭连接
socket_close( $socket );
}
|
Send_socker_xdcoder $buffer为返回值
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
function Send_socket_xdcoder( $service_port , $address , $in ) {
//创建 TCP/IP socket
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP) or die ( "could not create socket!" );
//设置超时时间
$timeout = 2;
$time = time();
//设置非阻塞模式
@socket_set_nonblock( $socket );
//超时判断
while (!@socket_connect( $socket , $address , $service_port )) {
$err = socket_last_error( $socket );
// 连接成功
if ( $err === 10056) {
break ;
}
//连接失败,判断超时时间,停止
if ((time() - $time ) >= $timeout ) {
socket_close( $socket );
echo "<script>alert('网络异常,请检查网络连接!!');</script>" ;
exit ();
}
// 刷新频率(250毫秒)
usleep(250000);
}
//设置阻塞模式
@socket_set_block( $socket );
//发送命令到设备
socket_write( $socket , $in , strlen ( $in ));
//接收设备命令返回数据
$buffer = socket_read( $socket , 1024, PHP_NORMAL_READ);
//关闭连接
socket_close( $socket );
//输出返回值
return $buffer ;
}
|
2. 采用php socket技术使用UDP协议连接设备,实现通讯和发送命令
参数$service_port 连接端口
参数$address 发送IP地址
参数$in 发送命令
?
1
2
3
4
5
6
7
8
9
10
11
12
|
function Send_socket_connect_udp( $service_port , $address , $in ) {
//采用php socket技术使用UDP协议连接设备
$socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
@socket_set_option( $socket , SOL_SOCKET, SO_RCVTIMEO, array ( "sec" => 2, "usec" => 0));
//发送命令
@socket_sendto( $socket , $in , strlen ( $in ), 0, $address , $service_port );
@socket_recvfrom( $socket , $buffer , 1024, MSG_WAITALL, $address , $service_port );
//关闭连接
if ( empty ( $buffer )) {
echo "<script>alert('网络异常,请检查网络连接!!');</script>" ;
}
}
|
Send_socket_xdcoder_udp $buffer 为返回值
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
function Send_socket_xdcoder_udp( $service_port , $address , $in ) {
//采用php socket技术使用UDP协议连接设备
$socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
@socket_set_option( $socket , SOL_SOCKET, SO_RCVTIMEO, array ( "sec" => 2, "usec" => 0));
//发送命令
@socket_sendto( $socket , $in , strlen ( $in ), 0, $address , $service_port );
@socket_recvfrom( $socket , $buffer , 1024, MSG_WAITALL, $address , $service_port );
//关闭连接
socket_close( $socket );
if (! empty ( $buffer )) {
return $buffer ;
} else {
echo "<script>alert('网络异常,请检查网络连接!!');</script>" ;
}
}
|
参数$com 串口号
参数$baudratr 波特率
参数$in 发送命令
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
function rs232_connect( $com , $baudrate , $in ) {
@set_time_limit(10);
//使用 'windows下设置窜口参数';
exec ( "mode " . $com . " BAUD=" . $baudrate . " PARITY=n DATA=8 STOP=1 odsr=off" );
// "打开端口串口$com";
$f = @ fopen ( $com , 'w+' );
//判断串口是否正常打开
if (! $f ) {
//echo "<script>alert('Error when open $com!!');</script>";
die ( "Error when open $com" );
}
//向串口发送数据;
fwrite( $f , $in );
//关闭端口
fclose( $f );
//串口操作结束
}
|
还有一个关于命令16进制转换的:
?
1
2
3
4
5
6
7
|
function hexToStr( $hex ) {
$string = "" ;
for ( $i = 0; $i < strlen ( $hex ) - 1; $i +=3) {
$string .= chr (hexdec( $hex [ $i ] . $hex [ $i + 1]));
}
return $string ;
}
|
希望本文所述对大家的php程序设计有所帮助。
相关文章
猜你喜欢
- 个人服务器网站搭建:如何选择合适的服务器提供商? 2025-06-10
- ASP.NET自助建站系统中如何实现多语言支持? 2025-06-10
- 64M VPS建站:如何选择最适合的网站建设平台? 2025-06-10
- ASP.NET本地开发时常见的配置错误及解决方法? 2025-06-10
- ASP.NET自助建站系统的数据库备份与恢复操作指南 2025-06-10
TA的动态
- 2025-07-10 怎样使用阿里云的安全工具进行服务器漏洞扫描和修复?
- 2025-07-10 怎样使用命令行工具优化Linux云服务器的Ping性能?
- 2025-07-10 怎样使用Xshell连接华为云服务器,实现高效远程管理?
- 2025-07-10 怎样利用云服务器D盘搭建稳定、高效的网站托管环境?
- 2025-07-10 怎样使用阿里云的安全组功能来增强服务器防火墙的安全性?
快网idc优惠网
QQ交流群
您的支持,是我们最大的动力!
热门文章
-
2025-05-27 60
-
2025-05-27 20
-
PHP把JPEG图片转换成Progressive JPEG的方法
2025-05-29 64 -
2025-06-04 35
-
2025-05-27 76
热门评论