python - socketserver 模块应用
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 模块应用的更多相关文章
- Python socketserver模块解析
参考:https://blog.csdn.net/qq_33733970/article/details/79153938 1.功能简介 socketserver模块是对socket模块的再封装,用于 ...
- 浅析python中socketserver模块使用
虽然说用python编写简单的网络程序狠方便,但是复杂一点的网络程序还是用现成的框架比较好,这样就可以专心事物逻辑,而不是套接字的各种细节.Socketserver模块简化了编写网络服务程序,同时so ...
- python 内置标准库socketserver模块的思考
socketserver模块简化了编写网络服务器的任务, 在很大程度上封装了一些操作, 你可以看成是事件驱动型的设计, 这很不错.它定义了两个最基本的类--服务器类 BaseServer, 请求处理类 ...
- Python网络编程(3)——SocketServer模块与简单并发服务器
主要类型 该模块有四个比较主要的类,其中常用的是 TCPServer 和 UDPServer. 1. TCPServer 2. UDPServer 3. UnixStreamServer,类似于TCP ...
- SocketServer模块 《Python核心编程(第3版)》——2.5
本文内容参考文章地址: https://m.aliyun.com/yunqi/articles/93088/ SocketServer模块 SocketServer是标准库中的一个高级模块(Pytho ...
- python 网络编程之socket开发和socketserver模块
一 客户端/服务器架构 1.硬件C/S架构(打印机) 2.软件C/S架构 互联网中处处是C/S架构 如黄色网站是服务端,你的浏览器是客户端(B/S架构也是C/S架构的一种) 腾讯作为服务端为你提供视频 ...
- python网络编程socketserver模块(实现TCP客户端/服务器)
摘录python核心编程 socketserver(python3.x版本重新命名)是标准库中的网络编程的高级模块.通过将创建网络客户端和服务器所必须的代码封装起来,简化了模板,为你提供了各种各样的类 ...
- Python进阶----UDP协议使用socket通信,socketserver模块实现并发
Python进阶----UDP协议使用socket通信,socketserver模块实现并发 一丶基于UDP协议的socket 实现UDP协议传输数据 代码如下:
- Python网络编程(2)-粘包现象及socketserver模块实现TCP并发
1. 基于Tcp的远程调用命令实现 很多人应该都使用过Xshell工具,这是一个远程连接工具,通过上面的知识,就可以模拟出Xshell远程连接服务器并调用命令的功能. Tcp服务端代码如下: impo ...
随机推荐
- webapi返回泛型给easyui
由于之前遇到的easyui调用webapi的问题. 参见 :http://blog.csdn.net/hanjun0612/article/details/51144991 所以就考虑,封装一个泛型用 ...
- FFT/NTT总结+洛谷P3803 【模板】多项式乘法(FFT)(FFT/NTT)
前言 众所周知,这两个东西都是用来算多项式乘法的. 对于这种常人思维难以理解的东西,就少些理解,多背板子吧! 因此只总结一下思路和代码,什么概念和推式子就靠巨佬们吧 推荐自为风月马前卒巨佬的概念和定理 ...
- 震惊!1MB == 1000KB??
稍微对电脑了解一点的同学可能都知道,电脑中的单位换算是: 1KB = 1024B 1MB = 1024KB 1GB = 1024MB ... 以前,我也是这么认为的.... 最近我在Linux解压某个 ...
- 解决FLASH遮住层的问题 IE,Firefox都适用!
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://down ...
- 预测氨基酸替换的致病性及分子机制:MutPred工具的使用
MutPred的功能是预测氨基酸替换后的致病性及其分子机制,旧版本见链接:http://mutpred1.mutdb.org/ 新版本更新为MutPred2,见网站链接:http://mutpred2 ...
- Ansible playbook 批量修改服务器密码 先普通后root用户
fsckzy Ansible playbook 批量修改服务器密码 客户的需求:修改所有服务器密码,密码规则为Rfv5%+主机名后3位 背景:服务器有CentOS6.7,SuSE9.10.11,r ...
- JQuery实现轮播图及其原理
源码: <!DOCTYPE html> <html> <head> <meta charset="utf-8" name="vi ...
- range与xrange的区别
一.Python中range()与xrange()有什么区别 range([start,] stop[, step]),根据start与stop指定的范围以及step设定的步长,生成一个序列 rang ...
- 即将上线的Spark服务器面临的一系列填坑笔记
即将上线的Spark服务器面临的一系列填坑笔记 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 把kafka和flume倒腾玩了,以为可以轻松一段时间了,没想到使用CDH部署的spa ...
- Tomcat定义虚拟主机案例
Tomcat定义虚拟主机案例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.准备环境 1>.创建web程序的根目录 [root@yinzhengjie ~]# mkdir ...