python之路--FTP 上傳視頻示例
阿新 • • 發佈:2019-01-08
ict bin pat 循環讀取 send spa utf 保存 highlight
# 服務端 import json import socket import struct server = socket.socket() server.bind((‘127.0.0.1‘,8001)) server.listen() conn,addr = server.accept() #首先接收文件的描述信息的長度 struct_data_len = conn.recv(4) data_len = struct.unpack(‘i‘,struct_data_len)[0] # 通過文件信息的長度將文件的描述信息全部接收 print(‘data_len>>>‘,data_len) file_info_bytes = conn.recv(data_len) #將文件描述信息轉換為字典類型,以便操作 file_info_json = file_info_bytes.decode(‘utf-8‘) file_info_dict = json.loads(file_info_json) #{‘file_name‘: ‘aaa.mp4‘, ‘file_size‘: 24409470} print(file_info_dict) #統計每次接收的累計長度 recv_sum = 0 #根據文件描述信息,指定文件路徑和文件名稱 file_path = ‘D:\s18\jj‘ + ‘\\‘ + file_info_dict[‘file_name‘] #接收文件的真實數據 with open(file_path,‘wb‘) as f: #循環接收,循環結束的依據是文件描述信息中文件的大小,也是通過一個初始值為0的變量來統計 while recv_sum < file_info_dict[‘file_size‘]: every_recv_data = conn.recv(1024) recv_sum += len(every_recv_data) f.write(every_recv_data)
# 客戶端 import os import socket import json import struct client = socket.socket() client.connect((‘127.0.0.1‘,8001)) #統計文件大小 file_size = os.path.getsize(r‘D:\python_workspace_s18\day029\aaa.mp4‘) #統計文件描述信息,給服務端,服務端按照我的文件描述信息來保存文件,命名文件等等,現在放到一個字典裏面了 file_info = { ‘file_name‘:‘aaa.mp4‘, ‘file_size‘:file_size, } #由於字典無法直接轉換成bytes類型的數據,所以需要json來將字典轉換為json字符串.在把字符串轉換為字節類型的數據進行發送 #json.dumps是將字典轉換為json字符串的方法 file_info_json = json.dumps(file_info) #將字符串轉換成bytes類型的數據 file_info_byte = file_info_json.encode(‘utf-8‘) #為了防止黏包現象,將文件描述信息的長度打包後和文件的描述信息的數據一起發送過去 data_len = len(file_info_byte) data_len_struct = struct.pack(‘i‘,data_len) #發送文件描述信息 client.send(data_len_struct + file_info_byte) #定義一個變量,=0,作為每次讀取文件的長度的累計值 sum = 0 #打開的aaa.mp4文件,rb的形式, with open(‘aaa.mp4‘,‘rb‘) as f: #循環讀取文件內容 while sum < file_size: #每次讀取的文件內容,每次讀取1024B大小的數據 every_read_data = f.read(1024) #將sum累加,統計長度 sum += len(every_read_data) #將每次讀取的文件的真實數據返送給服務端 client.send(every_read_data)
python之路--FTP 上傳視頻示例