# 客户端

# -*- coding: utf-8 -*-

import socketserver
import struct
import json
import subprocess class MyTcpHandler(socketserver.BaseRequestHandler):
def handle(self):
while True:
try:
cmd = self.request.recv(1024)
if not cmd: break
print(cmd.decode('utf-8'))
obj = subprocess.Popen(cmd.decode('utf-8'),
shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE
)
stdout = obj.stdout.read()
stderr = obj.stderr.read()
# 制作报头
header_dic = {
'file_name': cmd.decode('utf-8'),
'data_size': len(stdout) + len(stderr)
}
header_json = json.dumps(header_dic)
header_bytes = header_json.encode('utf-8')
# 发送报头字典长度
self.request.send(struct.pack('i', len(header_bytes)))
# 发送报头
self.request.send(header_bytes)
# 发送正文
self.request.send(stdout + stderr)
except ConnectionResetError:
break if __name__ == '__main__':
server = socketserver.ThreadingTCPServer(('127.0.0.1', 8080), MyTcpHandler)
server.serve_forever()

  

# 服务端

# -*- coding: utf-8 -*-

from socket import *
import struct
import json client = socket(AF_INET, SOCK_STREAM)
client.connect(('127.0.0.1', 8080)) while True:
cmd = input('>>>:').strip()
if not cmd:
continue
client.send(cmd.encode('utf-8'))
# 先接收报头长度并解析
dic_size = client.recv(4)
header_size = struct.unpack('i', dic_size)[0]
# 获取报头字典
header_json = client.recv(header_size).decode('utf-8')
header_dic = json.loads(header_json)
file_size = header_dic['data_size']
get_size = 0
info = b''
while get_size < file_size:
data = client.recv(1024)
get_size += len(data)
info += data
print(info.decode('gbk'))

  

最新文章

  1. exynos4412中断编程
  2. spring 事务传播特性 和隔离级别
  3. angular(3)服务 --注入---自定义模块--单页面应用
  4. .Net Attribute详解(上)-Attribute本质以及一个简单示例
  5. Qt5 任务栏托盘功能实现
  6. The authenticity of host 192.168.0.xxx can&#39;t be established.
  7. CentOS(三)--初识linux的文件系统以及用户组等概念
  8. POJ 1466 最大独立集入门
  9. js url编码函数
  10. c# gdi+输出成不同mime类型的图片
  11. caffe在windows编译project及执行mnist数据集測试
  12. selenium + robotframework的运行原理
  13. 40. Combination Sum II(midum, backtrack, 重要)
  14. openlayers3 实现点选的几种方式
  15. 【全网最全的博客美化系列教程】08.自定义地址栏Logo
  16. Windows2012 要远程登录,你需要具有通过远程桌面服务进行登录的权限.
  17. css3实现不同的loading
  18. 2017-2018-20172309 『Java程序设计』课程 结对编程练习_四则运算_第三周
  19. Python的函数基础
  20. You are not late! You are not early!

热门文章

  1. Intelij idea 中文字体渲染异常解决方法
  2. postman传数组参数
  3. 工控随笔_24_西门子TIA 博图硬件目录的更新
  4. 小程序报错:对应的服务器 TLS 为 TLS 1.0 ,小程序要求的 TLS 版本必须大于等于 1.2
  5. 【NPDP笔记】第五章 工具与度量
  6. 191128A学习入门-典型信号,单位冲激信号
  7. MySQL Community Server 8.0.16
  8. 小甲鱼汇编语言学习笔记——day02
  9. Redis解决“重试次数”场景的实现思路
  10. python+selenium实现自动化百度搜索关键词