Resolver o problema de congestionamento e exercícios simultâneos

Servidor

importar socketserver 
importar estrutura
importar json

classe MyRequestHandle (socketserver.BaseRequestHandler):
def handle (self):
print (self.client_address)
while True:
try:
cmd = self.request.recv (1024)

if len (cmd) == 0: quebra de
impressão (cmd.decode ('utf-8'))
com aberto (cmd, mode = 'rb') como f:
arquivo = f.read ()

total_size = len (arquivo)

header_dic = {
"total_size": total_size,
"md5": "123123xi12ix12"
}

json_str = json.dumps (header_dic)
json_str_bytes = json_str.encode ('gbk')

x = struct.pack ('i', len (json_str_bytes))
self.request.send (x)

self.request.send (json_str_bytes)
self .request.send (arquivo),

exceto exceção:
break
self.request.close ()

s = socketserver.ThreadingTCPServer (('127.0.0.1', 8080), MyRequestHandle)
s.serve_forever ()

Cliente

importar estrutura 
importar json
importar os
do soquete importar *

cliente = soquete (AF_INET, SOCK_STREAM)
client.connect (('127.0.0.1', 8080))

while True:
cmd = input ('' '' '' '' >>: ') .strip ()
se não os.path.exists (cmd):
continue
client.send (cmd.encode (' utf-8 '))
x = client.recv (4)
header_len = struct.unpack (' i ' , x) [0]
print (header_len)

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
enquanto recv_size <tamanho total:
recv_data = client.recv (1024)
recv_size + = len (recv_data)
arquivo = recv_data
escolha = cmd.rsplit ('.', 1) [1]
se escolha == 'jpg':
com aberto (r'C: \ Users \ dell \ Desktop \ python14 \ day37 \ code \ arquivo de download \ copy.jpg ', mode =' ab ') como f:
f.write (file)
continue
escolha elif ==' txt ':
com aberto (r'C: \ Users \ dell \ Desktop \ python14 \ day37 \ code \ arquivo de download \ job.txt ', mode =' ab ') como f:
f.write (file)
continue
escolha elif ==' mp4 ':
com open (r 'C: \ Users \ dell \ Desktop \ python14 \ day37 \ code \ arquivo de download \ copy.mp4', mode = 'ab') como f:
f.gravação (arquivo)
continuar
else:
print ()

Acho que você gosta

Origin www.cnblogs.com/0B0S/p/12746765.html
Recomendado
Clasificación