Servidor Import soquete Import struct Import JSON Import OS servidor = socket.socket (socket.AF_INET, socket.SOCK_STREAM) server.bind (( ' 172.0.0.1 ' , 8080 )) server.listen ( 5. ) Enquanto True: Conn, client_addr = server.accept () o tempo True: o try : arquivo = conn.recv (1024 ) se len (file) == 0: INTERVALO # presença ou ausência do arquivo baixado para determinar se não os.path.exists (File): conn.send ( ' link para download não existe ' .encode ( ' GBK ' )) INTERVALO # Abra o arquivo para ler os dados com Open (Arquivo, ' rb ' ) AS f: RES = f .read () res_len = len (FER) # cabeça produção header_dic = { " TOTAL_SIZE " : res_len} json_str = json.dumps (header_dic) json_str_bytes = json_str.encode ( 'GBK ' ) # comprimento de transmissão cabeçalho X = struct.pack ( ' I ' , len (json_str_bytes)) conn.send (X) # transmissão de dados de cabeçalho conn.send (json_str_bytes) conn.send (RES) o salvo excepção: RUPTURA socket de importação do cliente conn.close () importação json import struct cliente = socket.socket (socket.AF_INET, socket.SOCK_STREAM) client.connect (( ' 172.0.0.1 ' , 8080 )) while file True:A entrada = ( ' Por favor, indique o nome do arquivo que você deseja fazer o download ' ) .strip () IF len (File) == 0: o Continue client.send (file.encode ( ' GBK ' )) # primeiro a receber um 4, foi preparada para dar o comprimento da informação de cabeçalho X = client.recv (. 4 ) header_len = struct.unpack ( ' I ' , X) [0] # , depois de a cabeça tem um comprimento, o comprimento da informação de cabeçalho TOTAL_SIZE entrar json_str_bytes = client.recv (header_len) json_str = json_str_bytes.decode ( ' gbk ' ) header_dic = = header_dic [ json.loads (json_str) total_size" total_size " ] recv_size = 0 enquanto total_size> recv_size: recv_data = client.recv (1024 ) recv_size + = len (recv_data) print (recv_data.decode ( ' gbk ' ), end = '' ) print ()