代码
#server端<br>import json<br>import struct<br>import socket<br># 接收<br>sk = socket.socket()<br>sk.bind(('127.0.0.1',9001))<br>sk.listen()<br><br>conn,_ =sk.accept()<br>msg_len = conn.recv(4)<br>dic_len = struct.unpack('i',msg_len)[0]<br>msg = conn.recv(dic_len).decode('utf-8')<br>msg = json.loads(msg)<br><br>with open(msg['filename'],'wb') as f:<br> while msg['filesize'] > 0:<br> content = conn.recv(1024)<br> msg['filesize'] -= len(content)<br> f.write(content)<br>conn.close()<br>sk.close()<br><br><br>#client<br><br>import os<br>import json<br>import struct<br>import socket<br># 发送<br>sk = socket.socket()<br># sk.connect(('192.168.14.109',9012))<br>sk.connect(('127.0.0.1',9001))<br># 文件名\文件大小<br>abs_path = r'D:\python22期\day28 课上视频\3.网络基础概念.mp4'<br>filename = os.path.basename(abs_path)<br>filesize = os.path.getsize(abs_path)<br>dic = {'filename':filename,'filesize':filesize}<br>str_dic = json.dumps(dic)<br>b_dic = str_dic.encode('utf-8')<br>mlen = struct.pack('i',len(b_dic)) #len(b_dic)必须是bytes类型的<br>sk.send(mlen) # 4个字节 表示字典转成字节之后的长度<br>sk.send(b_dic) # 具体的字典数据<br><br>with open(abs_path,mode = 'rb') as f:<br> while filesize>0:<br> content = f.read(1024)<br> filesize -= len(content)<br> sk.send(content)<br>sk.close()