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 JSON格式数据交互实例代码详解
Jan 13 PHP
深入理解用mysql_fetch_row()以数组的形式返回查询结果
Jun 05 PHP
深入HTTP响应状态码速查表的详解
Jun 07 PHP
php实现httpclient类示例
Apr 08 PHP
PHP实现UTF-8文件BOM自动检测与移除实例
Nov 05 PHP
php常用文件操作函数汇总
Nov 22 PHP
简单了解将WordPress中的工具栏移到底部的小技巧
Dec 31 PHP
php实现按天数、星期、月份查询的搜索框
May 02 PHP
PHP 搜索查询功能实现
Nov 29 PHP
yii2实现分页,带搜索的分页功能示例
Jan 07 PHP
浅谈PHP的exec()函数无返回值排查方法(必看)
Mar 31 PHP
在laravel5.2中实现点击用户头像更改头像的方法
Oct 14 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中的内存管理问题
2011/08/31 PHP
php像数组一样存取和修改字符串字符
2014/03/21 PHP
PHP函数eval()介绍和使用示例
2014/08/20 PHP
ThinkPHP登录功能的实现方法
2014/08/20 PHP
php使用unset()删除数组中某个单元(键)的方法
2015/02/17 PHP
学习php设计模式 php实现合成模式(composite)
2015/12/08 PHP
php中的抽象方法和抽象类
2017/02/14 PHP
利用php生成验证码
2017/02/23 PHP
vs2003 js文件编码问题的解决方法
2010/03/20 Javascript
最简单的JavaScript验证整数、小数、实数、有效位小数正则表达式
2015/04/17 Javascript
jquery判断单选按钮radio是否选中的方法
2015/05/05 Javascript
JS实现网页标题栏显示当前时间和日期的完整代码
2015/11/02 Javascript
原生javascript实现自动更新的时间日期
2016/02/12 Javascript
Angular 表单控件示例代码
2017/06/26 Javascript
JavaScrip数组删除特定元素的几种方法总结
2017/09/06 Javascript
深入浅析Vue 中 ref 的使用
2019/04/29 Javascript
vue 实现input表单元素的disabled示例
2019/10/28 Javascript
微信小程序实现轨迹回放的示例代码
2019/12/13 Javascript
python中MySQLdb模块用法实例
2014/11/10 Python
使用Django的模版来配合字符串翻译工作
2015/07/27 Python
Pycharm编辑器技巧之自动导入模块详解
2017/07/18 Python
python web基础之加载静态文件实例
2018/03/20 Python
DataFrame.to_excel多次写入不同Sheet的实例
2019/12/02 Python
scrapy与selenium结合爬取数据(爬取动态网站)的示例代码
2020/09/28 Python
OpenCV读取与写入图片的实现
2020/10/13 Python
解决pytorch 模型复制的一些问题
2021/03/03 Python
CSS3用@font-face实现自定义英文字体
2013/09/23 HTML / CSS
HTML5 Canvas像素处理使用接口介绍
2012/12/02 HTML / CSS
html5需遵循的6个设计原则
2016/04/27 HTML / CSS
大学生的应聘自我评价
2013/12/13 职场文书
刚毕业大学生自荐信范文
2014/02/20 职场文书
销售顾问工作计划书
2014/09/15 职场文书
地雷战观后感
2015/06/09 职场文书
Python机器学习之PCA降维算法详解
2021/05/19 Python
CSS filter 有什么神奇用途
2021/05/25 HTML / CSS
Go语言基础切片的创建及初始化示例详解
2021/11/17 Golang