1、服务端
import socket
import json
import subprocess
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server.bind(("127.0.0.1", 8080))
server.listen(5)
while True:
conn, addr = server.accept()
print("客户端IP+端口:", addr)
while True:
try:
cmd = conn.recv(1024)
except:
break
cmd = cmd.decode("utf-8")
print("客户端发过来的数据:", cmd)
obj = subprocess.Popen(cmd.decode("utf-8"),
shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE
)
out_res = obj.stdout.read()
err_res = obj.stderr.read()
data_size = len(out_res) + len(err_res)
header = {
'file_name': 'a.mp4',
'file_size': data_size,
'md5': "fdjalfj"
}
header_json = json.dumps(header)
header_bytes = header_json.encode('utf-8')
header_h = bytes(str(len(header_bytes)), 'utf-8').zfill(4)
conn.send(header_h)
conn.send(header_bytes)
conn.send(out_res)
conn.send(err_res)
server.close()
2、客户端
import socket
import json
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(("127.0.0.1", 8080))
while True:
cmd = input("请输入终端命令>>>").strip()
if not cmd:
continue
client.send(cmd.encode('utf-8'))
header_size = int(client.recv(4).decode("utf-8"))
header_json = client.recv(header_size).decode('utf-8')
header = json.loads(header_json)
print(header)
data_size = header_size['file_size']
recv_size = 0
data = b''
while recv_size < data_size:
res = client.recv(1024)
recv_size += len(res)
data += res
print(data.decode("utf-8"))
print(len(data))
client.close()