这篇文章主要介绍了PHP实现连接设备、通讯和发送命令的方法,涉及php基于socket实现设备连接及数据通信的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
 

本文实例讲述了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实现连接设备、通讯和发送命令的方法的更多相关文章

  1. excel2003出现“向程序发送命令时出现错误”解决方法

    电脑已经预装了office2010,因为想要学习 <Excel 图标之道>,安装了Excel2003,刚刚安装好,打开出现“向程序发送命令时出现错误”,虽然点击确定就可以用了,可总是觉得不 ...

  2. 打开office时提示错误窗口“向程序发送命令时出现问题”的解决方案

    今天同事问了我一件很怪异的事情,说她的office打不开了,如打开word或excel时,突然出现错误提示错误窗口"向程序发送命令时出现问题",分析原因才知道她安装了 AVG pc ...

  3. windows环境telnet发送命令

    telnet *.*.*.* port ,然后crtl+]进入命令模式,使用send发送消息,如:send hello,murphy 常用命令: open : 使用 openhostname 可以建立 ...

  4. excel第一次打开报错 向程序发送命令时出错 多种解决办法含终极解决方法

    excel第一次打开报错 向程序发送命令时出错 多种解决办法含终极解决方法 office2007应该遇到“向程序发送命令时出现 问题”,设置为以管理员运行也不好用,重装office也不好用,下面介绍下 ...

  5. Microsoft Word 2007 向程序发送命令时出现问题解决方法

    最近在打开Word文档时总是出现“向程序发送命令时出现问题”对话框,而且不确定性,关闭重新打开有时没事了有时还不行, 很让人头疼,经过尝试,把问题解决了 1.问题截图如下: 2.解决方法 1)方法一: ...

  6. 打开Office2007弹出“向程序发送命令时出现问题” 解决方案

    打开Office2007弹出“向程序发送命令时出现问题” 解决方案,试了很多方案,最终还是这种方法帮我解决了问题,分享下,以下地址便是: http://club.excelhome.net/threa ...

  7. Saltstack 命令行:批量发送命令,返回执行结果

    批量发送发送命令符,并返回结果. salt '*' cmd.run 'df -h' ---------------------------------------- Stest1: Filesyste ...

  8. CAD出现向程序发送命令时出现问题提示解决方法分享

    大家有没有遇到在使用cad打开图纸的时候提示向程序发送命令时出现错误的情况呢,如果你在使用cad的时候出现了这个提示,是由于软件的兼容性出现了问题,那么该怎么办呢,下面小编就给大家带来cad打开图纸提 ...

  9. 自己主动化脚本ssh以及telnet发送命令并退出(windows和linux都适用)

    须要安装putty,用到的命令是plink: PuTTY Link: command-line connection utility Unidentified build, Jun 23 2015 1 ...

随机推荐

  1. Linux的硬链接和软链接

    1.Linux链接概念Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link), 也就是软链接.默认情况下,ln命令产生硬链接. [硬连接]硬连 ...

  2. css 基础 - 3

    css 基础 - 3 20161128   一. 元素的距离计算 1,两个水平方向的容器s1,s2之间的距离计算为s: s = s1的margin-right + s2的margin-left(+默认 ...

  3. shell 判断字符串长度是否不为0

    test.sh #!/bin/bash s1="" if test $s1 ;then echo "length is not zero" else echo ...

  4. Java Spring-注解进行属性注入

    2017-11-06 21:19:43 一.Spring的注解装配BeanSpring2.5 引入使用注解去定义Bean @Component 描述Spring框架中Bean Spring的框架中提供 ...

  5. Android之网络图片加载的5种基本方式

    学了这么久,最近有空把自己用到过的网络加载图片的方式总结了出来,与大家共享,希望对你们有帮助. 此博客包含Android 5种基本的加载网络图片方式,包括普通加载HttpURLConnection.H ...

  6. [oracle]创建查看 LOCAL INDEX

    create index IDX_T_GPS_CPH_local on T_GPS (CPH) local; create index IDX_T_GPS_SJ_local on T_GPS (SJ) ...

  7. voj 1754 spfa

    最优贸易 最优贸易 描述 C 国有 n 个大城市和 m 条道路,每条道路连接这 n 个城市中的某两个城市.任意两个 城市之间最多只有一条道路直接相连.这 m 条道路中有一部分为单向通行的道路,一部分 ...

  8. MongoDB驱动程序快速入门

    http://mongodb.github.io/mongo-java-driver/3.6/driver/getting-started/quick-start/

  9. HTML5安全:CORS(跨域资源共享)简介【转】

    前言:像CORS对于现代前端这么重要的技术在国内基本上居然很少有人使用和提及,在百度或者Google上搜索CORS,搜到的中文文章基本都是 另外一种卫星定位技术CORS的介绍,让我等前端同学情何以堪( ...

  10. tintColor 与 UIImage.renderingMode 渲染

    在iOS7中,UIView新增了一个属性tintColor.这是一个UIColor,被使用在UIView中改变应用程序的外观的.默认tintColor的值为nil,这表示它将会运用父视图层次的颜色来进 ...