目的:
通过服务端和客户端的连接,用户向客户端发出命令post 文件名
然后客户端系统根据os.path找到该文件的目录,将文件传输到服务端固定的文件中
即用户端将文件上传到服务端的文件夹中。
客户端代码: sk=socket.socket() address=('127.0.0.1',8000) sk.connect(address) BASE_DIR=os.path.dirname(os.path.abspath(__file__)) #当前文件夹的绝对路径 print(BASE_DIR) while 1: data=input('想要进行什么操作:(命令和文件之间用空格分开)').strip() cmd,path=data.split(' ') #获取命令和文件名 path=os.path.join(BASE_DIR,path) #拼接文件的完整路径 filename=os.path.basename(path) #获取文件名 size=os.stat(path).st_size #获取文件大小 file_info='post|%s|%s'%(filename,size) #将文件的所有信息发送给服务端,以便服务端处理数据 sk.sendall(file_info.encode('utf-8')) f=open(path,'rb') has_set=0 while has_set!= size: #如果已经发送的数据的大小小于文件大小,继续发送 data=f.read(1024) sk.sendall(data) has_set += len(data) f.close() print('结束')
服务端代码: import os sk=socket.socket() address=('127.0.0.1',8000) sk.bind(address) sk.listen(3) print('waiting...') BASE_DIR=os.path.dirname(os.path.abspath(__file__)) while 1: con,add=sk.accept() while 1: data=con.recv(1024) cmd,filename,filesize=data.decode('utf-8').split('|') path=os.path.join(BASE_DIR,'yuan',filename) #拼接出接收文件的存储路径,即程序目录下的yuan文件夹里的filename文件 filesize=int(filesize) #需要接收的数据的大小 f=open(path,'wb') has_get=0 while has_get!=filesize: #如果已经接收的数据的大小不等于传输过来的文件大小,继续接收数据 data=con.recv(1024) f.write(data) has_get +=len(data) f.close()