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版(5)
Oct 09 PHP
聊天室php&amp;mysql(六)
Oct 09 PHP
PHP通用检测函数集合
Nov 25 PHP
php单件模式结合命令链模式使用说明
Sep 07 PHP
PHP mkdir()定义和用法
Jan 14 PHP
抓取并下载CSS中所有图片文件的php代码
Sep 26 PHP
深入php socket的讲解与实例分析
Jun 13 PHP
php使用APC实现实时上传进度条功能
Oct 26 PHP
PHP面向对象程序设计之对象生成方法详解
Dec 02 PHP
PHP使用Nginx实现反向代理
Sep 20 PHP
php实现微信公众平台发红包功能
Jun 14 PHP
PHP实现倒计时功能
Nov 16 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
哪吒敖丙传:新人物二哥敖乙出场 小敖丙奶气十足
2020/03/08 国漫
php下使用SMTP发邮件的代码
2008/01/10 PHP
WordPress中给文章添加自定义字段及后台编辑功能区域
2015/12/19 PHP
浅谈PHP中new self()和new static()的区别
2017/08/11 PHP
学习ExtJS form布局
2009/10/08 Javascript
JavaScript之HTMLCollection接口代码
2011/04/27 Javascript
JQuery实现网页右侧随动广告特效
2016/01/17 Javascript
animate 实现滑动切换效果【实例代码】
2016/05/05 Javascript
Jquery调用iframe父页面中的元素及方法
2016/08/23 Javascript
学习vue.js中class与style绑定
2016/12/03 Javascript
以BootStrap Tab为例写一个前端组件
2017/07/25 Javascript
浅谈js中的this问题
2017/08/31 Javascript
了解在JavaScript中将值转换为字符串的5种方法
2019/06/06 Javascript
vue中如何实现后台管理系统的权限控制的方法步骤
2019/09/05 Javascript
浅探express路由和中间件的实现
2019/09/30 Javascript
js布局实现单选按钮控件
2020/01/17 Javascript
js数组中去除重复值的几种方法
2020/08/03 Javascript
javascript中闭包closure的深入讲解
2021/03/03 Javascript
[01:24:09]Ti4 冒泡赛第二轮DK vs C9 1
2014/07/14 DOTA
python采集百度百科的方法
2015/06/05 Python
浅谈Python处理PDF的方法
2017/11/10 Python
python 使用plt画图,去除图片四周的白边方法
2019/07/09 Python
Django模板Templates使用方法详解
2019/07/19 Python
python实时监控logstash日志代码
2020/04/27 Python
DjangoWeb使用Datatable进行后端分页的实现
2020/05/18 Python
Python xlwt模块使用代码实例
2020/06/10 Python
Python 使用生成器代替线程的方法
2020/08/04 Python
澳大利亚制造的蜡烛和扩散器:Glasshouse Fragrances
2018/05/20 全球购物
卡骆驰英国官网:Crocs英国
2019/08/22 全球购物
英国景点门票网站:attractiontix
2019/08/27 全球购物
应用化学专业本科生求职信
2013/09/29 职场文书
大学生优秀班干部事迹材料
2014/05/26 职场文书
纪律教育学习心得体会
2014/09/02 职场文书
代收款委托书范本
2014/10/01 职场文书
违反交通安全法检讨书
2014/10/24 职场文书
自从在 IDEA 中用了热部署神器 JRebel 之后,开发效率提升了 10(真棒)
2021/06/26 Java/Android