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. [IOI2018]会议——分治+线段树

    题目链接: [IOI2018]meetings 题目大意:有$n$座山峰,每座山峰有一个高度,有$q$次询问,每次需要确定一个开会山峰使$[l,r]$所有山峰上的人都前往开会山峰,一个山峰的人去开会的 ...

  2. Git初次使用总结,安装到上传代码,多平台[码云|github]

    安装步骤 1.选择安装路径 2.选择创建图标,选择安装Git Bash和Git GUI 3.选择创建开始菜单 4.选择:use git and optional unix tools from the ...

  3. 2019 Android 高级面试题总结

    说下你所知道的设计模式与使用场景 a.建造者模式: 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 使用场景比如最常见的AlertDialog,拿我们开发过程中举例,比如C ...

  4. 【Luogu4921】情侣?给我烧了!(组合计数)

    [Luogu4921]情侣?给我烧了!(组合计数) 题面 洛谷 题解 很有意思的一道题目. 直接容斥?怎么样都要一个平方复杂度了. 既然是恰好\(k\)对,那么我们直接来做: 首先枚举\(k\)对人出 ...

  5. 用DBContext (EF) 实现通用增删改查的REST方法

    我们用ADO.NET Entity Data Model来生成实体类后,一般都会对这些类进行基本的增删改查操作,如果每个类都要写这些基本的方法,实在太乏味了.下面就是通过step by step的方式 ...

  6. redis中的数据类型

    redis不是一个纯文本kv存储,实际上,它是一个数据结构服务,支持不同类型的value. 包含以下类型: 1.Binary-safe strings. 二进制安全的字符串 2.Lists: coll ...

  7. Android在初始化时弹出popwindow的方法

     http://blog.csdn.net/sxsboat/article/details/7340759 Android中在onCreate()时弹出popwindow,很多人都有过类似的需求吧,但 ...

  8. A1054. The Dominant Color

    Behind the scenes in the computer's memory, color is always talked about as a series of 24 bits of i ...

  9. 第二节,TensorFlow 使用前馈神经网络实现手写数字识别

    一 感知器 感知器学习笔记:https://blog.csdn.net/liyuanbhu/article/details/51622695 感知器(Perceptron)是二分类的线性分类模型,其输 ...

  10. Exception in thread "main" java.util.InputMismatchException

    今天写代码来了一个异常 /** * 需求分析:根据输入的天数是否是周六或是周日, * 并且天气的温度大于28摄氏度,则外出游泳,否则钓鱼 * @author chenyanlong * 日期:2017 ...