PHP实现连接设备、通讯和发送命令的方法
本文实例讲述了PHP实现连接设备、通讯和发送命令的方法。分享给大家供大家参考。具体如下:
开发的BS架构的软件(PHP),需要跟设备进行通讯,在此记录一下,欢迎各位指正:
1. 采用php socket技术使用TCP/IP连接设备
参数$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>" ; } } |
3. 采用RS232串口技术连接设备,实现通讯和发送命令
参数$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程序设计有所帮助。
PHP实现连接设备、通讯和发送命令的方法的更多相关文章
- excel2003出现“向程序发送命令时出现错误”解决方法
电脑已经预装了office2010,因为想要学习 <Excel 图标之道>,安装了Excel2003,刚刚安装好,打开出现“向程序发送命令时出现错误”,虽然点击确定就可以用了,可总是觉得不 ...
- 打开office时提示错误窗口“向程序发送命令时出现问题”的解决方案
今天同事问了我一件很怪异的事情,说她的office打不开了,如打开word或excel时,突然出现错误提示错误窗口"向程序发送命令时出现问题",分析原因才知道她安装了 AVG pc ...
- windows环境telnet发送命令
telnet *.*.*.* port ,然后crtl+]进入命令模式,使用send发送消息,如:send hello,murphy 常用命令: open : 使用 openhostname 可以建立 ...
- excel第一次打开报错 向程序发送命令时出错 多种解决办法含终极解决方法
excel第一次打开报错 向程序发送命令时出错 多种解决办法含终极解决方法 office2007应该遇到“向程序发送命令时出现 问题”,设置为以管理员运行也不好用,重装office也不好用,下面介绍下 ...
- Microsoft Word 2007 向程序发送命令时出现问题解决方法
最近在打开Word文档时总是出现“向程序发送命令时出现问题”对话框,而且不确定性,关闭重新打开有时没事了有时还不行, 很让人头疼,经过尝试,把问题解决了 1.问题截图如下: 2.解决方法 1)方法一: ...
- 打开Office2007弹出“向程序发送命令时出现问题” 解决方案
打开Office2007弹出“向程序发送命令时出现问题” 解决方案,试了很多方案,最终还是这种方法帮我解决了问题,分享下,以下地址便是: http://club.excelhome.net/threa ...
- Saltstack 命令行:批量发送命令,返回执行结果
批量发送发送命令符,并返回结果. salt '*' cmd.run 'df -h' ---------------------------------------- Stest1: Filesyste ...
- CAD出现向程序发送命令时出现问题提示解决方法分享
大家有没有遇到在使用cad打开图纸的时候提示向程序发送命令时出现错误的情况呢,如果你在使用cad的时候出现了这个提示,是由于软件的兼容性出现了问题,那么该怎么办呢,下面小编就给大家带来cad打开图纸提 ...
- 自己主动化脚本ssh以及telnet发送命令并退出(windows和linux都适用)
须要安装putty,用到的命令是plink: PuTTY Link: command-line connection utility Unidentified build, Jun 23 2015 1 ...
随机推荐
- POJ 2115 C Looooops(模线性方程)
http://poj.org/problem?id=2115 题意: 给你一个变量,变量初始值a,终止值b,每循环一遍加c,问一共循环几遍终止,结果mod2^k.如果无法终止则输出FOREVER. 思 ...
- Nature 为引,一文看懂个体化肿瘤疫苗前世今生
进入2017年,当红辣子鸡PD-1疗法,一路横扫多个适应症.而CAR-T治疗的“小车”在获得FDA专委会推荐后也已经走上高速路,成为免疫治疗又一里程碑事件.PD-1.CAR-T之后,下一个免疫治疗产品 ...
- QWebEngine_C++_交互
参考网址:http://blog.csdn.net/liuyez123/article/details/50509788 ZC: 该文章里面的: “ <ahref="javascrip ...
- IE8 JSON is not defined
问题原因: 昨天遇到了一个问题.就是用ajax从后台查询数据时,返回信息无法显示,经过提示发现是IE控制台提示: JSON is not defined 错误. 而且这个问题在本人自己的电脑上是不存在 ...
- PHP设计模式单例模式的继承实现
最近在做O2O平台的接入,因为发现之前公司的代码里已经有了某家开放平台的接入代码,如果我再往原先的控制器上加入逻辑代码,整个控制器的耦合度会非常高.加上每个平台有自己的签名验证算法,把加解密的方法写到 ...
- ABP zero出现Default language is not defined!的错误的解决方法
打开程序包管理器控制台,把EntityFramework作为默认项目,并且执行Update-Database命令 再运行项目
- 缓存cache(5.2新:redis): gem faker (6600✨) 命令行工具curl(系统内置,可在git上看到文档)
⚠️本章节记录缓存的一些方法的用法案例,配合这篇博客一起阅读:https://i.cnblogs.com/EditPosts.aspx?postid=8776632 前置种子 https://git ...
- Tornado的cookie过期问题
首先,web应用程序是使用HTTP协议进行数据传输,因为HTTP协议是无状态的,所以一旦提交数据完成后,客户端和服务器端的连接就会被关闭,再次进行数据的交换就得重新建立新的连接,那么,有个问题就是服务 ...
- 在使用DBMS_LOB.WRITEAPPEND()追加Clob内容的时候,报数字或值异常
在实际的使用中有可能会使用DBMS_LOB.WRITEAPPEND()去将Clob内容作为buffer增加到我们需要的对象中,但是在实际的使用中Clob大小往往是超过32767长度的,然而DBMS_L ...
- [批处理]Oracle启动助手
前段日子开始学Oracle数据库,但是由于Oracle数据库的服务启动时间很长 所以机房的里面所有电脑的Oracle服务全部是被禁用的 所以每次上机使用的时候都要先进服务管理,然后把禁用更改为手动模式 ...