socketserver 模块的使用与粘包问题的解决
基于tcp协议
服务端:
import socketserver
import subprocess
import struct
import json
class MyRequestHandle(socketserver.BaseRequestHandler):
def handle(self):
while True:
try:
cmd=self.request.recv(1024)
if cmd.decode('utf8') == 'q':
break
obj=subprocess.Popen(cmd.decode('utf8'),shell=True,stdout=subprocess.PIPE,stderr=subprocess.PIPE )
err_res=obj.stderr.read()
std_res=obj.stdout.read()
total_size=len(err_res)+len(std_res)
head_dic={
'file_name':'a.txt',
'total_size':total_size,
'md5':'asdfdfdfsd43432'
}
head_json=json.dumps(head_dic)
head_dic_size=len(head_json)
head_size=struct.pack('i',head_dic_size)
self.request.send(head_size)
self.request.send(head_json.encode('utf8'))
self.request.send(std_res + err_res)
except Exception:
break
self.request.close()
s=socketserver.ThreadingTCPServer(('127.0.0.1',8080),MyRequestHandle)
s.serve_forever()
im