准备工作,实现文件上传需要那些工具呢?
socket(传输)、open()(打开文件)、os(读取文件信息),当然还有辅助类sys和json,下面我们开始吧
import socket,sys import json,os #创建socket对象 server = socket.socket(socket.AF_INET,socket.SOCK_STREAM) #获取本地主机名 host = socket.gethostname() #设置端口号 port = 9000 #绑定端口 server.bind((host,port)) #设置最大连接数 server.listen(5) #建立连接 while True: print(\'开始监听\') #建立客户端连接 clint,addr = server.accept() print("连接地址: %s" % str(addr)) #接收文件属性数据,创建文件 jsonObj = json.loads(clint.recv(1024).decode(\'utf-8\')) print(\'接收到数据\',jsonObj) if not jsonObj : os.mknod(jsonObj[\'name\']) msg = json.dumps({\'name\':\'消息\',\'信号\':\'创建成功\'}) #回数据确认已经建立新文件 clint.send(msg.encode(\'utf-8\')) #接收数据 size = 0 sizeValue = int(jsonObj[\'size\']) print(\'开始接收数据\') with open(jsonObj[\'name\'], \'wb\') as file: while size < sizeValue: value = sizeValue - size if value >1024: getdate = clint.recv(1024) else : getdate = clint.recv(value) file.write(getdate) size += 1024 print(\'结束\') #关闭连接 clint.close()
客户端
\'\'\'发送文件 Usage: clint.py <name> [<rename>] \'\'\' import socket import os,json,sys #建立json数据,包含文件名以及大小 #{name:name,size:99999} date = {} if len(sys.argv) == 2: print(type(sys.argv[1])) name = sys.argv[1].split(\'\\\')[-1] date[\'name\'] = name else: date[\'name\'] = sys.argv[2] date[\'size\'] = os.path.getsize(sys.argv[1]) jsonString = json.dumps(date).encode(\'utf-8\') #create connection clint = socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 获取本地主机名 host = socket.gethostname() # 设置端口好 port = 9000 # 连接服务,指定主机和端口 clint.connect((host, port)) #发送文件属性信息 clint.send(jsonString) #接收服务端发过来的确认信息 clint.recv(1024) #发送文件数据 size = 0 with open(sys.argv[1],\'rb\') as file: while size < date[\'size\']: fileDate = file.read(1024) clint.send(fileDate) size += 1024 #关闭连接 clint.close()