struct模块定制报头ftp实践
# server 接收端
# buffer 设置4096会 文件传不完 import socket import struct import json sk = socket.socket() sk.bind(('127.0.0.1',8090)) sk.listen() buffer = 1024 conn,addr = sk.accept() head_len = conn.recv(4) head_len = struct.unpack('i',head_len)[0] json_head = conn.recv(head_len).decode('utf-8') head = json.loads(json_head) filesize = head['filesize'] with open(head['filename'],'wb') as f: while filesize: if filesize >= buffer: content = conn.recv(buffer) f.write(content) filesize -= buffer else: content = conn.recv(filesize) f.write(content) break conn.close() sk.close()
# client 发送端 import socket import struct import os import json sk = socket.socket() sk.connect(('127.0.0.1',8090)) buffer = 1024 head = {'filepath':r'K:\全栈-32678Hz', 'filename':r'day01.zip', 'filesize':None} file_path = os.path.join(head['filepath'],head['filename']) filesize = os.path.getsize(file_path) head['filesize'] = filesize json_head = json.dumps(head) bytes_head = json_head.encode('utf-8') #计算head的长度 head_len = len(bytes_head) pack_len = struct.pack('i',head_len) sk.send(pack_len) sk.send(bytes_head) with open(file_path,'rb') as f: while filesize: if filesize >= buffer: content = f.read(buffer) sk.send(content) filesize -= buffer else: content = f.read(filesize) sk.send(content) break sk.close()