实现文件传输

import socket
import json
import struct
import os
server=socket.socket()
server.bind(('127.0.0.1',8080))
server.listen(10)

while True:
try:
sock, addr = server.accept()
data=sock.recv(10)
data=data.decode('utf8')
if data=='q':
# 获取文件名称
file_name=input('请输入文件名称>>>:').strip()
# 获取需要传输的文件路径
file_path=input('请输入你需要传输的文件路径>>>:').strip()
if os.path.exists(file_path):
# 定义一个字典
data_dict={
'file_name':file_name,
'file_size':os.path.getsize(file_path)
}
# 将子弹转为json格式
dict_json=json.dumps(data_dict)
# 转成bytes类型
dict_bytes=dict_json.encode('utf8')
# 打包
dict_data=struct.pack('i',len(dict_bytes))
# 发送报头
sock.send(dict_data)
# 发送字典
sock.send(dict_bytes)
with open(file_path,'rb') as f:
for line in f:
sock.send(line)
else:
print('文件路径不存在!')
else:
break
except Exception as e:
break

客户端:
import socket
import struct
import json
client=socket.socket()
client.connect(('127.0.0.1',8080))
while True:
# 询问是否接受文件
choice = input('是否接受文件(q)>>>:').strip()
choice1 = choice.encode('utf8')
client.send(choice1)
if choice=='q':
# 接受报头
dict_data=client.recv(4)
if dict_data:
# 解析
dict_len=struct.unpack('i',dict_data)[0]
print(dict_len)
# 接受字典
dict_data1=client.recv(dict_len)
dict_data1=json.loads(dict_data1)
recv_size=0
with open(r'%s'%dict_data1.get('file_name'),'wb') as f:
while recv_size<dict_data1.get('file_size'):
data=client.recv(1024)
recv_size+=len(data)
f.write(data)
else:
continue
else:
break

posted on   淦白嫖怪  阅读(53)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示