Python全栈——文件上传下载

余生颓废 提交于 2020-01-24 17:58:48

server.py

import socket
import pickle

# 不传参数,默认使用基于网络类型的套接字,协议:TCP
server = socket.socket()
# 告诉别人server的地址和端口
# 端口的范围是0-65535,但是0-1023这些是默认端口不能使用
server.bind(('192.168.1.107', 18080))
# 能同时接受的连接
server.listen()
# 接受客户端的连接,阻塞等待
conn, addr = server.accept()

pic_dic = conn.recv(1024)
dic = pickle.loads(pic_dic)
if dic['opt'] == 'upload':
    # 上传功能
    filename = '1' + dic['filename']
    with open(filename, 'w', encoding='utf-8') as f:
        f.write(dic['content'])
elif dic['opt'] == 'download':
    # 下载功能
    filename = dic['filename']
    with open(filename, 'r', encoding='utf-8') as f:
        content = f.read()

    pic_content = pickle.dumps(content)
    conn.send(pic_content)
else:
    print('错误')

conn.close()
server.close()

client.py

import socket
import os
import pickle

client = socket.socket()
client.connect(('192.168.1.107', 18080))

menu = {'1': 'upload', '2': 'download'}
for k, v in menu.items():
    print(k, v)

num = input('请输入功能选项:')
if num == '1':
    # 上传功能
    file_path = input('请输入一个文件的绝对路径:')
    filename = os.path.basename(file_path)
    with open(file_path, 'r', encoding='utf-8') as f:
        content = f.read()

    # 执行功能,文件名,文件内容
    dic = {'opt': menu.get(num), 'filename': filename, 'content': content}
    # print(dic)
    pic_dic = pickle.dumps(dic)
    client.send(pic_dic)
    print('文件上传成功!')
elif num == '2':
    # 下载功能
    file_path = input('请输入一个文件的绝对路径:')
    filename = os.path.basename(file_path)
    dic = {'opt': menu.get(num), 'filename': filename}
    # print(dic)
    pic_dic = pickle.dumps(dic)
    client.send(pic_dic)

    pic_content = client.recv(1024)
    content = pickle.loads(pic_content)
    with open('2' + filename, 'w', encoding='utf-8') as f:
        f.write(content)
    print('文件下载成功!')
else:
    print('错误')

client.close()
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!