SERVER端
import json import os import socket import struct ip_port = ('192.168.1.101', 12345) sk = socket.socket() sk.bind(ip_port) sk.listen() buffer = 1024 conn, addr = sk.accept() pack_len = conn.recv(4) head_len = struct.unpack('i', pack_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: print(filesize) if filesize >= buffer: content = conn.recv(buffer) filesize -= buffer f.write(content) else: content = conn.recv(filesize) f.write(content) break conn.close() sk.close()
CLIENT端
import json import struct import os import socket buffer = 4096 ip_port = ('192.168.1.115', 12345) sk = socket.socket() sk.connect(ip_port) head = {'filepath': r'...', 'filename': r'...', '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') print(json_head) # 计算head长度 head_len = len(bytes_head) pack_len = struct.pack('i', head_len) sk.send(pack_len) # 先发报头长度 sk.send(bytes_head) # 再发送byte类型的报头 with open(file_path, 'rb') as f: while filesize: print(filesize) if filesize >= buffer: content = f.read(buffer) # 每次读出来的内容 sk.send(content) filesize -= buffer else: content = f.read(filesize) sk.send(content) break