简单文件下载

import json
import socket
import os
# 文件下载:server
# 1.建立连接
import struct

ss = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ss.bind(('127.0.0.1', 8080))
ss.listen(5)
share_dir = 'C:/test'
while True:
conn, client_addr = ss.accept()
print(client_addr)
# 2.得到命令
while True:
try:
res = conn.recv(1024)
if not res:
break
cmds = res.decode('utf-8')
cmd = cmds.split()[0]
print(cmd)
filename = cmds.split()[1]
print(filename)
# 3.传输文件
# 第一步:得到文件信息
header = {
'filename': 'a.txt',
'md5': 'sldkgjnlkgjlg',
'size': os.path.getsize(r'%s/%s' %(share_dir, filename))
}
header_json = json.dumps(header)
header_bytes = header_json.encode('utf-8')
# 第二步:发送文件信息
conn.send(struct.pack('i', len(header_bytes)))
conn.send(header_bytes)
# 第三步:发送文件
with open('%s/%s' %(share_dir, filename), 'rb') as file:
# conn.send(file)
for line in file:
conn.send(line)
except ConnectionResetError:
break
conn.close()

# 4.关闭连接
ss.close()


import json
import socket
import struct
# 文件下载:client
import struct

download_dic = 'C:/test/test'
ss = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ss.connect(('127.0.0.1', 8080))
print('连接建立.......')
while True:
cmd = input(">>:").strip()
if not cmd:
continue
ss.send(cmd.encode('utf-8'))
# 接受数据
obj = ss.recv(4)
header_size = struct.unpack('i', obj)[0]
header_bytes = ss.recv(header_size)
header_json = header_bytes.decode('utf-8')
header_dic = json.loads(header_json)
file_size = header_dic['size']
filename = header_dic['filename']
path = download_dic + '/' + filename
with open(path, 'wb') as file:
recv_size = 0
while recv_size < file_size:
line = ss.recv(1024)
file.write(line)
recv_size += len(line)
print('总大小:%s, 以下载大小:%s' %(file_size, recv_size))
ss.close()

posted @   __sunshine  阅读(36)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示