目的:
通過服務端和客戶端的連接,用戶向客戶端發出命令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()
