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