1. 程式人生 > >python day32--struct,檔案上傳下載

python day32--struct,檔案上傳下載

一、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-=buffer
print(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()