Python课程设计 第 50 / 52 篇

第四阶段项目-参考答案

共享网盘(SharedNetworkDisk)

写一个共享网盘的程序,要求使用面向对象且按照软件开发规范进行设计,必须具备以下功能:

  1. 至少包含用户和文件两个类,用户可以注册登陆
  2. 用户上传的文件可以是普通文件,图片或者视频
  3. 上传的数据要用md5加密
  4. 上传的时候不能粘包
  5. 存储的时候保证文件名,文件md5值和文件内容都保存在服务端机器上
  6. 用md5值校验重复文件内容,用户上传的重复文件,不通过网络传输

TCP协议传输大文件 - 服务端

from socket import *
import struct

server_address = ('127.0.0.1', 8080)
server = socket(AF_INET, SOCK_STREAM)
server.bind(server_address)
server.listen(5)

conn, client_address = server.accept()
print(client_address)

file_name = conn.recv(1024)
print(file_name.decode('utf-8'))

with open(file_name, 'wb') as f:
    while True:
        file_data = conn.recv(1024)
        if file_data:
            f.write(file_data)
        else:
            break

print(file_name, '保存成功')

TCP协议传输大文件 - 客户端

from socket import *
import struct
server_address = ('127.0.0.1', 8080)
client = socket(AF_INET, SOCK_STREAM)
client.connect(server_address)

file_name = '1.mp4'
client.send(file_name.encode('utf-8'))

with open(file_name, 'rb') as f:
    while True:
        file_data = f.read(1024)
        if file_data:
            client.send(file_data)
        else:
            print(file_name, '上传完成')
            break
client.close()