python day32--struct,檔案上傳下載
阿新 • • 發佈:2018-12-26
一、struct模組
可以把要傳送的資料長度轉換成固定長度的位元組
struct.pack('i',資料長度)
struct.unpack('i',資料長度)
二、上傳下載檔案作業
server
import struct import socket import json import os sk=socket.socket() sk.bind(('127.0.0.1',8080)) sk.listen() conn,addr=sk.accept() header_len=conn.recv(4) header_len=struct.unpack('i',header_len)[0] header_by=conn.recv(header_len) header=json.loads(header_by) filename=header['filename'] fileside=header['fileside'] buffer=4096 with open(filename,'wb') as f: while fileside: if fileside>=buffer: content=conn.recv(buffer) f.write(content) fileside-=bufferprint(fileside) else: content=conn.recv(fileside) break conn.close() sk.close()
client
import struct import socket import json import os sk=socket.socket() sk.connect(('127.0.0.1',8080)) header={'filepath':r'E:\人工智慧python課件\基礎班-就業班課件資料 -1-4位基礎班 5-14就業班\14-人工智慧階段:-機器學習-深度學習-實戰專案\30-36深度學習' ,'filename':r'對抗生成網路.zip' ,'fileside':None} file_path=os.path.join(header['filepath'],header['filename']) header['fileside']=os.path.getsize(file_path) fileside=header['fileside'] json_header=json.dumps(header).encode('utf-8') header_len=struct.pack('i',len(json_header)) sk.send(header_len)#傳送報文的長度 sk.send(json_header)#傳送報文 buffer=4096 with open(file_path,'rb') as f: while fileside: if fileside>=buffer: content=f.read(buffer) sk.send(content) fileside-=buffer print(fileside) else: content = f.read(fileside) sk.send(content) break sk.close()