python socketserver实现客户端多并发
直接看代码
server
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import socketserver
import subprocess class MyServer(socketserver.BaseRequestHandler):
def handle(self):
print("got connection from",self.client_address)
while True:
conn = self.request
data = conn.recv(1024)
if not data:break
print (str(data,'utf8'))
cmd = str(data,'utf8')
cmd_call = subprocess.Popen(cmd,shell=True,stdout=subprocess.PIPE)
cmd_result = cmd_call.stdout.read()
if len(cmd_result) == '':
cmd_result = b'no output'
ack_msg = bytes("CMD_RESULT_SIZE|%s" %len(cmd_result),'utf8')
conn.send(ack_msg)
client_ack = conn.recv(50)
if client_ack.decode() == 'CLIENT_READY_TO_RECV':
conn.send(cmd_result) if __name__ == '__main__':
server = socketserver.ThreadingTCPServer(('localhost',8091),MyServer)
server.serve_forever()
client
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import socket
ip_port = ('localhost',8091)
sk = socket.socket()
sk.connect(ip_port)
print ("客户端启动:") while True:
user_input = input("cmd:").strip()
if len(user_input) == 0:continue
if user_input == 'q':break
sk.send(bytes(user_input,'utf8'))
#ack_msg = b"CMD_RESULT_SIZE|%s" % len(cmd_result)
server_ack_msg = sk.recv(100)
cmd_res_msg = str(server_ack_msg.decode()).split("|")
print("server response:",cmd_res_msg)
if cmd_res_msg[0] =="CMD_RESULT_SIZE":
cmd_res_size = int(cmd_res_msg[1]) sk.send(b"CLIENT_READY_TO_RECV")
res = ''
received_size = 0
while received_size < cmd_res_size:
data = sk.recv(500)
received_size += len(data)
res += str(data.decode())
else:
print(str(res))
print('-------recv done----')
sk.close()
python socketserver实现客户端多并发的更多相关文章
- 使用Python SocketServer快速实现多线程网络服务器
Python SocketServer使用介绍 1.简介: SocketServer是python的一个网络服务器框架,可以减少开发人员编写网络服务器程序的工作量. SocketServer总共有4个 ...
- Python socketserver ftp功能简单讲解
socketserver模块实现并发 为什么要讲socketserver?我们之前写的tcp协议的socket是不是一次只能和一个客户端通信,如果用socketserver可以实现和多个客户端通信.它 ...
- socketserver模块(实现并发)
socketserver模块(实现并发) 一.基于UDP协议实现的并发 # 服务端 import socketserver class MyServer(socketserver.BaseReques ...
- 【性能诊断】四、单功能场景的性能分析(RedGate,找到同一个客户端的并发请求被串行化问题)
问题描述: 客户端js连续发起两个异步http请求,请求地址相同,但参数不同:POST http://*.*.*.*/*****/webservice/RESTFulWebService/RESTFu ...
- 基于Python的ModbusTCP客户端实现
Modbus协议是由Modicon公司(现在的施耐德电气Schneider Electric)推出,主要建立在物理串口.以太网TCP/IP层之上,目前已经成为工业领域通信协议的业界标准,广泛应用在工业 ...
- Python 用队列实现多线程并发
# Python queue队列,实现并发,在网站多线程推荐最后也一个例子,比这货简单,但是不够规范 # encoding: utf-8 __author__ = 'yeayee.com' # 由本站 ...
- 原!!win7-64 安装python的 redis客户端库
安装python的redis客户端库 本人系统已装python2.7 利用cmd命令行: 1.cmd-->python -->>>进入python命令下 >>> ...
- 【转】Linux环境搭建FTP服务器与Python实现FTP客户端的交互介绍
Linux环境搭建FTP服务器与Python实现FTP客户端的交互介绍 FTP 是File Transfer Protocol(文件传输协议)的英文简称,它基于传输层协议TCP建立,用于Interne ...
- HTTPS请求HTTP接口被浏览器阻塞,python实现websocket客户端,websocket服务器,跨域问题,dwebsocket,https,拦截,服务端
HTTPS请求HTTP接口被浏览器阻塞,python实现websocket客户端,websocket服务器,跨域问题,dwebsocket,https,拦截,服务端 发表时间:2020-03-05 1 ...
随机推荐
- 阻塞与非阻塞、同步与异步 I/O模型
I/O模型 Linux 下的五种I/O模型 阻塞I/O(blocking I/O) 非阻塞I/O (nonblocking I/O) I/O复用(select 和poll) (I/O multiple ...
- Visual Studio提示“无法启动IIS Express Web服务器”的解决方法
有时,在使用Visual Studio运行ASP.NET项目时,会提示"无法启动IIS Express Web服务器",无法运行,如图: 这一般出现在重装系统之后,或者项目是从别的 ...
- Jmeter 多台机器产生负载
使用多台机器产生负载的操作步骤如下: (1)在所有期望运行jmeter作为 负载生成器的机器上安装jmeter, 并确定其中一台机器作为 controller ,其他的的机器作为agent .然后运行 ...
- control
group:多个脚本之间按照独立设置模式跑,各个脚本可以单独设置虚拟用户.运行时间等 scenario:多个脚本之间按照相同的模式跑,将总的虚拟用户数按照一定的比例分配给各个脚本 ---------- ...
- linux反弹shell
参考链接 http://www.cnblogs.com/r00tgrok/p/reverse_shell_cheatsheet.html http://www.waitalone.cn/linux-s ...
- 4、BufferedIn(out)putStream--->字节输入/输出流的缓冲区类(高效类:高效率读写)
前言 字节流一次读写一个数组的速度明显比一次读写一个字节的速度快很多,这是加入了数组这样的缓冲区效果,java本身在设计的时候,也考虑到了这样的设计思想(装饰设计模式后面讲解),所以提供了字节缓冲区流 ...
- 常用的HTTP状态码如下
成功的状态码: – 服务器成功返回网页 – 未修改 失败的状态码: – 请求的网页不存在 – 服务器暂时不可用 – 服务器内部错误 下面的不是很常用,记住上面那几个就ok了,有bug了再补充 其他的状 ...
- GlusterFS无法启动原因及处理方案
启动结果: Redirecting to /bin/systemctl status glusterd.serviceglusterd.service - GlusterFS, a clustere ...
- hdu_4742_Pinball Game 3D(cdq分治+树状数组)
题目链接:hdu_4742_Pinball Game 3D 题意: 给你n个点,让你求三维的LIS,并且求出有多少种组合能达到LIS. 题解: 求三维的LIS,典型的三维偏序问题,x排序,解决一维,c ...
- 4、Web应用程序中的安全向量 -- over-posting(重复提交)
模型绑定是ASP.NET MVC提供的强大功能,可遵照命名约定将输入元素映射到模型属性,从而极大地简化了处理用户输入的过程,然而,这也成为了攻击的另一种没接,给攻击者提供了一个填充模型属性的机会,右下 ...