ftp上传下载文件

时间:2023-03-10 07:18:57
ftp上传下载文件

客户端client:

 import os
import json
import socket
import struct sk = socket.socket()
sk.connect(('127.0.0.1',8090)) buffer = 1024 head = {'filepath':r'/Users/mango/Downloads/试题/07 python fullstack s9day9 第一次考试试题讲解',
'filename':r'07 python fullstack s9day9 第一次考试试题讲解.mp4',
'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') #字符串转bytes
head_len = len(bytes_head) #计算报头的bytes有多长
struct_len = struct.pack('i',head_len) #打包成固定的4个字节
sk.send(struct_len) #发送长度
sk.send(bytes_head) #发送报头
with open(file_path,'rb')as f: #打开文件
while filesize:
if filesize >= buffer:
content = f.read(buffer)
filesize -= buffer
sk.send(content)
else:
f.read(filesize)
filesize -= buffer
sk.send(content)
sk.close()#

服务端server:

 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()