客戶端 import socket import os import json import struct client =socket.socket() client.connect(("127.0.0.1",12000)) """ 獲取文件路徑 獲取這個文件路徑下的文件 for循環打印再加上枚舉打印這個文件下的內容 用戶選擇上傳內容 判斷輸入是否時數字 而後把輸入的序號轉爲int類型 判斷這個數字是否大於文件內容 取出用戶選擇的內容而後拼接路徑 取出用戶選擇文件的內容 建立一個字典,取名字放入取出的內容 序列化字典將字典變成一個字符串後邊在轉成二進制 建立一個一個字典的報頭 發送字典的報頭 發送序列話事後的字典 打開文件for 循環文件據柄 在發送循環事後的字符 """ while True: HUOQU = r"D:\老男孩\學習資料\視頻\day30\視頻" PATH =os.listdir(HUOQU) for i ,j in enumerate(PATH,1): print(i,j) choice = input("請輸入編號>>>:") if choice.isdigit(): choice=int(choice)-1 if choice in range(0,len(PATH)): wenjian =os.path.join(HUOQU,PATH[choice]) neirong = os.path.getsize(wenjian) d ={"name":"歐美精選", "file_size":neirong} byths = json.dumps(d).encode("utf-8") suoxiaoshuju = struct.pack("i",len(byths)) client.send(suoxiaoshuju) client.send(byths) with open (wenjian,"rb") as f: for i in f: client.send(i) else: print("不在範圍") else: print("不是數字")
服務端 import socket import json import struct server = socket.socket() server.bind(("127.0.0.1",12000)) server.listen(5) """獲取文件報頭 將文件報頭解開 獲取文件 將文件反序列化,將字符串編程字典 取出字典的內的數據 建立初始文件長度 讀出字典文件的數據 判斷文件內的內的數據是否大於字典內的數據 每次取出字節1024 f.取出 文件長度+每次取出的字節""" while True: conn,msg = server.accept() while True: try: res = conn.recv(4) res1 = struct.unpack("i",res)[0] res2 = conn.recv(res1) res3 =json.loads(res2.decode("utf-8")) res4 = res3.get("file_size") dic_size = 0 with open(res3.get("name"),"wb") as f: while dic_size<res4: data = conn.recv(1024) f.write(data) dic_size+=len(data) print("sahngchuan") except ConnectionError as e: break conn.close()