server端:

import socketserver
import subprocess
import json
import struct class MyTCPHandler(socketserver.BaseRequestHandler):
print("执行程序")
def handle(self): #所有请求的交互都是在handle里执行的,
while True:
try:
# 获取指令
self.data = self.request.recv(1024).strip()
zl_s = self.data.decode() # 指令执行返回数据
data = subprocess.Popen(zl_s, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
data_Y_b = data.stdout.read()
data_E_b = data.stderr.read() # 封装数据总长度
data_len = len(data_Y_b) + len(data_E_b)
data_dict = {"data_dict": data_len}
json_data_s = json.dumps(data_dict) # 封装head部长度
json_data_b = json_data_s.encode()
head_len_i = len(json_data_b) # 封装前4个字节长度
head_len_b = struct.pack("i", head_len_i) # 发送4个字节,发送head,发送数据
self.request.sendall(head_len_b)
self.request.sendall(json_data_b)
self.request.sendall(data_Y_b)
self.request.sendall(data_E_b) except ConnectionResetError as e:
print("err ",e)
break if __name__ == "__main__":
HOST, PORT = "127.0.0.1", 8080
server = socketserver.ThreadingTCPServer((HOST, PORT), MyTCPHandler) #线程
server.serve_forever()

client端:

import socket
import json
import struct ip = "127.0.0.1"
port = 8080
ip_port = (ip,port)
buffer_size = 1024 client_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
client_socket.connect(ip_port) while True:
#发送指令至服务端.
zhiling_s = input(">>>:").strip()
if not zhiling_s:continue
zhiling_b = zhiling_s.encode()
client_socket.send(zhiling_b) #层层封装,收取对应数据对应长度,解封装. #获取前四个字节长度
head_len_b = client_socket.recv(4)
head_len_i = struct.unpack('i',head_len_b)[0]
print(head_len_i) #获取head部长度
json_data_b = client_socket.recv(head_len_i)
print(len(json_data_b)) #获取数据总长度
json_data_s = json_data_b.decode()
data_dict = json.loads(json_data_s)
data_len = data_dict["data_dict"]
print(data_len) #循环收取总数据
data_len_recv = 0
data = b""
while data_len_recv < data_len:
data += client_socket.recv(buffer_size)
data_len_recv += len(data)
print(data.decode("gbk")) client_socket.close()

python - socketserver 模块应用的更多相关文章

  1. Python socketserver模块解析

    参考:https://blog.csdn.net/qq_33733970/article/details/79153938 1.功能简介 socketserver模块是对socket模块的再封装,用于 ...

  2. 浅析python中socketserver模块使用

    虽然说用python编写简单的网络程序狠方便,但是复杂一点的网络程序还是用现成的框架比较好,这样就可以专心事物逻辑,而不是套接字的各种细节.Socketserver模块简化了编写网络服务程序,同时so ...

  3. python 内置标准库socketserver模块的思考

    socketserver模块简化了编写网络服务器的任务, 在很大程度上封装了一些操作, 你可以看成是事件驱动型的设计, 这很不错.它定义了两个最基本的类--服务器类 BaseServer, 请求处理类 ...

  4. Python网络编程(3)——SocketServer模块与简单并发服务器

    主要类型 该模块有四个比较主要的类,其中常用的是 TCPServer 和 UDPServer. 1. TCPServer 2. UDPServer 3. UnixStreamServer,类似于TCP ...

  5. SocketServer模块 《Python核心编程(第3版)》——2.5

    本文内容参考文章地址: https://m.aliyun.com/yunqi/articles/93088/ SocketServer模块 SocketServer是标准库中的一个高级模块(Pytho ...

  6. python 网络编程之socket开发和socketserver模块

    一 客户端/服务器架构 1.硬件C/S架构(打印机) 2.软件C/S架构 互联网中处处是C/S架构 如黄色网站是服务端,你的浏览器是客户端(B/S架构也是C/S架构的一种) 腾讯作为服务端为你提供视频 ...

  7. python网络编程socketserver模块(实现TCP客户端/服务器)

    摘录python核心编程 socketserver(python3.x版本重新命名)是标准库中的网络编程的高级模块.通过将创建网络客户端和服务器所必须的代码封装起来,简化了模板,为你提供了各种各样的类 ...

  8. Python进阶----UDP协议使用socket通信,socketserver模块实现并发

    Python进阶----UDP协议使用socket通信,socketserver模块实现并发 一丶基于UDP协议的socket 实现UDP协议传输数据 代码如下:

  9. Python网络编程(2)-粘包现象及socketserver模块实现TCP并发

    1. 基于Tcp的远程调用命令实现 很多人应该都使用过Xshell工具,这是一个远程连接工具,通过上面的知识,就可以模拟出Xshell远程连接服务器并调用命令的功能. Tcp服务端代码如下: impo ...

随机推荐

  1. Django-website 程序案例系列-8 html模板文件详解

    主模板:master.html <!DOCTYPE html> <html lang="en"> <head> <meta charset ...

  2. BZOJ3110[Zjoi2013]K大数查询——权值线段树套线段树

    题目描述 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c如果是2 a b c形式,表示询问从第a个位置到第b个位置,第C大的数是 ...

  3. Oracle JDK迁移指南

    Oracle JDK迁移指南 https://docs.oracle.com/en/java/javase/11/migrate/index.html#JSMIG-GUID-C25E2B1D-6C24 ...

  4. float 、double 加减乘除出现小数位多出的问题

    /** * 提供精確的加法運算 * @param args */ public static double add(double v1, double v2) { BigDecimal b1 = ne ...

  5. poj2386(简单的dfs/bfs)

    题目链接:http://poj.org/problem?id=2386 Description Due to recent rains, water has pooled in various pla ...

  6. unity开源移动库iTween使用完整Demo

    public Vector3[] paths; // Use this for initialization void Start () { paths = ] { , , ), , , -) }; ...

  7. AtCoder Regular Contest 076 F - Exhausted?

    题意: n个人抢m个凳子,第i个人做的位置必须小于li或大于ri,问最少几个人坐不上. 这是一个二分图最大匹配的问题,hall定理可以用来求二分图最大匹配. 关于hall定理及证明,栋爷博客里有:ht ...

  8. Luogu 1941 【NOIP2014】飞扬的小鸟 (动态规划)

    Luogu 1941 [NOIP2014]飞扬的小鸟 (动态规划) Description Flappy Bird 是一款风靡一时的休闲手机游戏.玩家需要不断控制点击手机屏幕的频率来调节小鸟的飞行高度 ...

  9. 【POJ1952】逢低吸纳 dp+计数

    题目大意:给定一个有 N 个数的序列,求其最长下降子序列的长度,并求出有多少种不同的最长下降子序列.(子序列各项数值相同视为同一种) update at 2019.4.3 题解:求最长下降子序列本身并 ...

  10. java连接数据库读取数据出现乱码

    因为这是通用编码,像中国通常使用的GBK.GB2312.Big5等只是针对中文而言,但是对其他文字就不适用了,为了使得这个问题的解决具有文字编码通用性,所以我这里设定了UTF8这个编码. 编码一致性涉 ...