服务端
from socket import *
import subprocess
import struct
import json
server = socket()
server.bind(('127.0.0.1',8080))
server.listen(5)
# 链接循环
while True:
conn,addr = server.accept()
# 通信循环
while True:
try:
cmd = conn.recv(1024)
if len(cmd) == 0: # 收到一个空
break
obj = subprocess.Popen(cmd.decode('utf-8'),
shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
)
stdout_res = obj.stdout.read() # windows系统gbk编码
stderr_res = obj.stderr.read()
total_size = len(stderr_res)+len(stdout_res)
# 制表头
header_dic = {
'filename':'a.txt',
'total_size':total_size,
'md5':'124csck345xnc123'
}
json_str = json.dumps(header_dic)
json_str_bytes = json_str.encode('utf-8')
# 先把头的长度发过去
header_size = struct.pack('i',len(json_str_bytes))
conn.send(header_size)
# 发头部信息
conn.send(json_str_bytes)
# 发送真实数据
conn.send(stdout_res+stderr_res)
except Exception:
break
conn.close()
客户端
from socket import *
import struct
import json
client = socket()
client.connect(('127.0.0.1',8080))
while True:
msg = input('请输入要发送的信息>>>:').strip()
if len(msg) == 0:
continue
client.send(msg.encode('utf-8'))
# 接收端
# 先收4个字节 从中提取下来要收的头的长度
header_size = client.recv(4)
header_len = struct.unpack('i',header_size)[0]
# 接收头并解析
json_str_bytes = client.recv(header_len)
json_str = json_str_bytes.decode('utf-8')
header_dic = json.loads(json_str)
print(header_dic)
total_size = header_dic['total_size']
recv_size = 0
while recv_size < total_size:
recv_data = client.recv(1024)
recv_size += len(recv_data)
print(recv_data.decode('gbk'),end = '')
else:
print()