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 模板高级篇总结
Dec 21 PHP
PHP 加密解密内部算法
Apr 22 PHP
ThinkPHP实现跨模块调用操作方法概述
Jun 20 PHP
PHP的运行机制与原理(底层)
Nov 16 PHP
[原创]php简单隔行变色功能实现代码
Jul 09 PHP
[原创]php简单防盗链验证实现方法
Jul 09 PHP
php Session无效分析资料整理
Nov 29 PHP
PHP获取指定日期是星期几的实现方法
Nov 30 PHP
PHP实现双链表删除与插入节点的方法示例
Nov 11 PHP
laravel批量生成假数据的方法
Oct 09 PHP
关于laravel框架中的常用目录路径函数
Oct 23 PHP
laravel框架实现后台登录、退出功能示例
Oct 31 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-CGI进程CPU 100% 与 file_get_contents 函数的关系分析
2011/08/15 PHP
php自定义函数实现汉字转换utf8编码的方法
2016/09/29 PHP
php正则去除网页中所有的html,js,css,注释的实现方法
2016/11/03 PHP
PHP版单点登陆实现方案的实例
2016/11/17 PHP
php的laravel框架快速集成微信登录的方法
2016/12/12 PHP
一个非常实用的php文件上传类
2017/07/04 PHP
搜索附近的人PHP实现代码
2018/02/11 PHP
php中文语义分析实现方法示例
2019/09/28 PHP
JS中Iframe之间传值及子页面与父页面应用
2013/03/11 Javascript
谈谈关于JavaScript 中的 MVC 模式
2013/04/11 Javascript
jquery插件validate验证的小例子
2013/05/08 Javascript
JS+CSS实现淡入式焦点图片幻灯切换效果的方法
2015/02/26 Javascript
jQuery实现鼠标划过修改样式的方法
2015/04/14 Javascript
使用AngularJS实现可伸缩的页面切换的方法
2015/06/19 Javascript
jQuery实现form表单元素序列化为json对象的方法
2015/12/09 Javascript
JavaScript的React框架中的JSX语法学习入门教程
2016/03/05 Javascript
AngularJs concepts详解及示例代码
2016/09/01 Javascript
使用PBFunc在Powerbuilder中支付宝当面付款功能
2016/10/01 Javascript
Angular4开发解决跨域问题详解
2017/08/28 Javascript
基于react组件之间的参数传递(详解)
2017/09/05 Javascript
jQuery与vue实现拖动验证码功能
2018/01/30 jQuery
原生JS+HTML5实现的可调节写字板功能示例
2018/08/30 Javascript
JS/HTML5游戏常用算法之追踪算法实例详解
2018/12/12 Javascript
详解Nuxt.js中使用Element-UI填坑
2019/09/06 Javascript
微信小程序中的列表切换功能实例代码详解
2020/06/09 Javascript
python executemany的使用及注意事项
2017/03/13 Python
使用Python爬虫库requests发送表单数据和JSON数据
2020/01/25 Python
pandas的resample重采样的使用
2020/04/24 Python
如何解决安装python3.6.1失败
2020/07/01 Python
携程英文网站:Trip.com
2017/02/07 全球购物
极简鞋类,赤脚的感觉:Lems Shoes
2019/08/06 全球购物
大学毕业生通用自荐信范文
2013/10/31 职场文书
人力资源部培训专员岗位职责
2014/01/02 职场文书
2014年信访工作总结
2014/11/17 职场文书
2014年教师思想工作总结
2014/12/03 职场文书
教你用python实现一个无界面的小型图书管理系统
2021/05/21 Python