php实现与python进行socket通信的方法示例


Posted in PHP onAugust 30, 2017

本文实例讲述了php实现与python进行socket通信的方法。分享给大家供大家参考,具体如下:

设计目的

通过前端页面发起请求交给php,php创建socket请求交给Python脚本,然后执行完毕之后,返回给前端。

index.html

<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()
  {
    g_xmlHttpReq.open("GET","./service/main.php?cmd=1",true);
    g_xmlHttpReq.onreadystatechange=onReplyCallback;
    g_xmlHttpReq.send(null);
  }
  </script>
</head>
<body>
<button onclick="on_stop_service()">关闭服务</button>
</body>
</html>

service / main.php

<?php
require_once('mysocket.php');
$con = Connector::getInstance();
$req = "aaaaaaa";
$con->sendMsg($req);
$ret = $con->getMsg();
echo $ret;
?>

service / 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;
      }
    }
  }
}
?>

multiServer.py

import threading
import socket
import time
encoding = 'utf-8'
BUFSIZE = 1024
# a read thread, read data from remote
class Reader(threading.Thread):
  def __init__(self, client):
    threading.Thread.__init__(self)
    self.client = client
  def run(self):
    #while True:
    data = self.client.recv(BUFSIZE)
    if(data):
       string = bytes.decode(data, encoding)
       print "from client::",string,""
       time.sleep(10)
       self.client.send("return frome server::" + string)
    print "close:", self.client.getpeername()
  def readline(self):
    rec = self.inputs.readline()
    if rec:
      string = bytes.decode(rec, encoding)
      if len(string)>2:
        string = string[0:-2]
      else:
        string = ' '
    else:
      string = False
    return string
# a listen thread, listen remote connect
# when a remote machine request to connect, it will create a read thread to handle
class Listener(threading.Thread):
  def __init__(self, port):
    threading.Thread.__init__(self)
    self.port = port
    self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    self.sock.bind(("0.0.0.0", port))
    self.sock.listen(0)
  def run(self):
    print "listener started"
    while True:
      client, cltadd = self.sock.accept()
      print "accept a connect..."
      Reader(client).start()
      cltadd = cltadd
      print "accept a connect(new reader..)"
lst = Listener(8888)  # create a listen thread
lst.start() # then start
# Now, you can use telnet to test it, the command is "telnet 127.0.0.1 9011"
# You also can use web broswer to test, input the address of "http://127.0.0.1:9011" and press Enter button
# Enjoy it....

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

PHP 相关文章推荐
php 小乘法表实现代码
Jul 16 PHP
PHP中=赋值操作符对不同数据类型的不同行为
Jan 02 PHP
php中http_build_query 的一个问题
Mar 25 PHP
php中将字符串转为HTML的实体引用的一个类
Feb 03 PHP
PHP生成迅雷、快车、旋风等软件的下载链接代码实例
May 12 PHP
PHP中cookie和session的区别实例分析
Aug 28 PHP
PHP文件上传问题汇总(文件大小检测、大文件上传处理)
Dec 24 PHP
XHProf报告字段含义的解析
May 17 PHP
PHP微信开发之文本自动回复
Jun 23 PHP
php常用的工具开发整理
Sep 26 PHP
phpfpm的作用和用法
Oct 10 PHP
如何使用php生成zip压缩包
Apr 21 PHP
利用PHP访问MySql数据库的逻辑操作以及增删改查的实例讲解
Aug 30 #PHP
PHP Socket网络操作类定义与用法示例
Aug 30 #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
You might like
PHP分页显示制作详细讲解
2006/12/05 PHP
E路文章系统PHP
2006/12/11 PHP
ThinkPHP模板范围判断输出In标签与Range标签用法详解
2014/06/30 PHP
JavaScript Array Flatten 与递归使用介绍
2011/10/30 Javascript
JavaScript Scoping and Hoisting 翻译
2012/07/03 Javascript
浏览器的JavaScript引擎的识别方法
2013/10/20 Javascript
jquery插件推荐 jquery.cookie
2014/11/09 Javascript
kindeditor修复会替换script内容的问题
2015/04/03 Javascript
AngularJS学习笔记之基本指令(init、repeat)
2015/06/16 Javascript
javascript实现在下拉列表中显示多级树形菜单的方法
2015/08/12 Javascript
学习使用jquery iScroll.js移动端滚动条插件
2020/03/24 Javascript
JSON字符串转换JSONObject和JSONArray的方法
2016/06/03 Javascript
jquery的checkbox,radio,select等方法小结
2016/08/30 Javascript
Bootstrap 实现查询的完美方法
2016/10/26 Javascript
JavaScript+HTML5实现的日期比较功能示例
2017/07/12 Javascript
vue.js-div滚动条隐藏但有滚动效果的实现方法
2018/03/03 Javascript
vscode自定义vue模板的实现
2021/01/27 Vue.js
[01:35]辉夜杯战队访谈宣传片—iG.V
2015/12/25 DOTA
Pyramid Mako模板引入helper对象的步骤方法
2013/11/27 Python
盘点提高 Python 代码效率的方法
2014/07/03 Python
Python中IPYTHON入门实例
2015/05/11 Python
python利用高阶函数实现剪枝函数
2018/03/20 Python
python实现列表中由数值查到索引的方法
2018/06/27 Python
pandas 将list切分后存入DataFrame中的实例
2018/07/03 Python
python 实现对数据集的归一化的方法(0-1之间)
2018/07/17 Python
python3利用Socket实现通信的方法示例
2019/05/06 Python
python对输出的奇数偶数排序实例代码
2020/12/04 Python
英国在线滑雪板和冲浪商店:The Board Basement
2020/01/11 全球购物
开办饭店创业计划书
2013/12/28 职场文书
优秀少先队大队辅导员事迹材料
2014/05/04 职场文书
黄河绝恋观后感
2015/06/08 职场文书
实习感想范文
2015/08/10 职场文书
小学语文继续教育研修日志
2015/11/13 职场文书
入党申请书格式
2019/06/20 职场文书
Python echarts实现数据可视化实例详解
2022/03/03 Python
图片批量处理 - 尺寸、格式、水印等
2022/03/07 杂记