PHP Socket网络操作类定义与用法示例


Posted in PHP onAugust 30, 2017

本文实例讲述了PHP Socket网络操作类定义与用法。分享给大家供大家参考,具体如下:

web前端测试:

<html>
<head>
  <title>test</title>
  <script>
  g_xmlHttpReq = new XMLHttpRequest();
  function onReplyCallback()
  {
    if(g_xmlHttpReq.readyState==4 && g_xmlHttpReq.status==200)
    {
      alert(g_xmlHttpReq.responseText);
    }
  }
  function on_stop_service()
  {
    var cmd = document.getElementById("inCmd").value;
    g_xmlHttpReq.open("GET","./service/main.php?cmd=" + cmd,true);
    g_xmlHttpReq.onreadystatechange=onReplyCallback;
    g_xmlHttpReq.send(null);
  }
  </script>
</head>
<body>
<input type="text" id="inCmd">
<hr>
<button onclick="on_stop_service()">关闭服务</button>
</body>
</html>

mysocket.php:

<?php
class Connector
{
  public static $instance=null;
  public $conn;
  private function __construct()
  {
      set_time_limit(0);
      $ip = '192.168.238.1';
      $port = 8888;
      if(($this->conn = socket_create(AF_INET,SOCK_STREAM,SOL_TCP)) < 0)
      {
        echo "socket_create() 失败的原因是:".socket_strerror($this->conn)."\n";
      }
      $result = socket_connect($this->conn, $ip, $port);
      if ($result < 0) {
        echo "socket_connect() failed.\nReason: ($result) " . socket_strerror($result) . "\n";
      }else {
        echo "连接OK\n";
      }
  }
  public static function getInstance()
  {
    if(is_null(self::$instance))
    {
      self::$instance = new Connector;
    }
    return self::$instance;
  }
  public function sendMsg($msg)
  {
    socket_write($this->conn,$msg);
  }
  public function getMsg()
  {
    $clients = array($this->conn);
    while(true)
    {
      $read = $clients;
      $wrSet = NULL;
      $errSet = NULL;
      if(socket_select($read, $wrSet,$errSet, 3) < 1)
      {
        continue;
      }
      foreach($read as $read_sock)
      {
        $data = @socket_read($read_sock,1024,PHP_BINARY_READ);
        socket_close($this->conn);
        return $data;
      }
    }
  }
}
?>

main.php(调用场所):

<?php
require_once('mysocket.php');
$con = Connector::getInstance();
$req = $_GET['cmd'];
$con->sendMsg($req);
$ret = $con->getMsg();
echo $ret;
?>

应用说明:

客户端ajax发起请求调用Php,然后php借助socket进一步发起请求给C++模块。

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
php的控制语句
Oct 09 PHP
php批量缩放图片的代码[ini参数控制]
Feb 11 PHP
php中XMLHttpRequest(Ajax)不能设置自定义的Referer的解决方法
Nov 26 PHP
解析thinkphp的左右值无限分类
Jun 20 PHP
PHP如何将log信息写入服务器中的log文件
Jul 29 PHP
php查找字符串中第一个非0的位置截取
Feb 27 PHP
PHP实现压缩图片尺寸并转为jpg格式的方法示例
May 10 PHP
ThinkPHP3.2框架自定义配置和加载用法示例
Jun 14 PHP
laravel 数据迁移与 Eloquent ORM的实现方法
Apr 12 PHP
Yii框架参数配置文件params用法实例分析
Sep 11 PHP
php日志函数error_log用法实例分析
Sep 23 PHP
Laravel 创建指定表 migrate的例子
Oct 09 PHP
[原创]php token使用与验证示例【测试可用】
Aug 30 #PHP
Laravel框架中VerifyCsrfToken报错问题的解决
Aug 30 #PHP
Laravel框架中Blade模板的用法示例
Aug 30 #PHP
php实现支持中文的文件下载功能示例
Aug 30 #PHP
利用PHPStorm如何开发Laravel应用详解
Aug 30 #PHP
Laravel 5.5 的自定义验证对象/类示例代码详解
Aug 29 #PHP
PHP单例模式与工厂模式详解
Aug 29 #PHP
You might like
单位速度在实战中的运用
2020/03/04 星际争霸
ThinkPHP让分页保持搜索状态的方法
2014/07/02 PHP
php计划任务之ignore_user_abort函数实现方法
2015/01/08 PHP
PHP中的Session对象如何使用
2015/09/25 PHP
PHP实现websocket通信的方法示例
2018/08/28 PHP
laravel 配置路由 api和web定义的路由的区别详解
2019/09/03 PHP
showModelessDialog()使用详解
2006/09/07 Javascript
Javascript Math ceil()、floor()、round()三个函数的区别
2010/03/09 Javascript
解决jquery的.animate()函数在IE6下的问题
2010/12/03 Javascript
JS 模态对话框和非模态对话框操作技巧汇总
2013/04/15 Javascript
jquery实现的鼠标拖动排序Li或Table
2014/05/04 Javascript
jquery实现显示已选用户
2014/07/21 Javascript
JavaScript利用闭包实现模块化
2017/01/13 Javascript
JavaScript Date 知识浅析
2017/01/29 Javascript
js实现无缝滚动图
2017/02/22 Javascript
jQuery实现鼠标滑过预览图片大图效果的方法
2017/04/26 jQuery
js实现股票实时刷新数据案例
2017/05/14 Javascript
详解vue slot插槽的使用方法
2017/06/13 Javascript
Javascript 严格模式use strict详解
2017/09/16 Javascript
浅谈webpack打包生成的bundle.js文件过大的问题
2018/02/22 Javascript
JS面向对象的程序设计相关知识小结
2018/05/26 Javascript
Vue前后端不同端口的实现方法
2018/09/19 Javascript
layui按条件隐藏表格列的实例
2019/09/19 Javascript
python发送arp欺骗攻击代码分析
2014/01/16 Python
Python中title()方法的使用简介
2015/05/20 Python
Ubuntu下创建虚拟独立的Python环境全过程
2017/02/10 Python
快速解决pandas.read_csv()乱码的问题
2018/06/15 Python
python实现日志按天分割
2019/07/22 Python
Keras实现支持masking的Flatten层代码
2020/06/16 Python
python的flask框架难学吗
2020/07/31 Python
本科生个人求职自荐信
2013/09/26 职场文书
大学生入党群众意见书
2015/06/02 职场文书
红高粱观后感
2015/06/10 职场文书
nginx前后端同域名配置的方法实现
2021/03/31 Servers
Python3 多线程(连接池)操作MySQL插入数据
2021/06/09 Python
Python机器学习实战之k-近邻算法的实现
2021/11/27 Python