server.py
import socket
import json
import struct
sk = socket.socket()
sk.bind(('127.0.0.1', 2000))
sk.listen()
conn, addr = sk.accept()
msg_len = conn.recv(4)
dic_len = struct.unpack("i", msg_len)[0] # 防止粘包
msg = conn.recv(dic_len).decode("utf-8")
msg = json.loads(msg)
with open(msg['filename'], 'wb') as f:
while msg['filesize'] > 0:
content = conn.recv(1024)
msg['filesize'] -= len(content) # tcp协议将1024字节分开发送
f.write(content)
conn.close()
sk.close()
client.py
import os
import json
import struct
import socket
sk = socket.socket()
sk.connect(('127.0.0.1', 2000))
# 文件名\文件大小
abs_path = r'F:\个人文档\计算病理及其数字化切片组织形态学定量分析.docx'
filename = os.path.basename(abs_path)
filesize = os.path.getsize(abs_path)
dic = {'filename': filename, 'filesize': filesize}
str_dic = json.dumps(dic)
b_dic = str_dic.encode("utf-8")
mlen = struct.pack('i', len(b_dic))
sk.send(mlen)
sk.send(b_dic)
with open(abs_path, mode='rb') as f:
while filesize > 0:
content = f.read(1024)
filesize -= 1024
sk.send(content)
sk.close()
先运行server,py、后client.py