客户端 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()