-
这里是通过tcp文件传输案列,运用struct模块解决粘包问题
# server端
importsocket
importjson
importstruct
sk= socket.socket()
sk.bind(('127.0.0.1', 9000))
sk.listen()
conn, addr= sk.accept()
msg_len= conn.recv(4) # b'"x00x00x00'
dic_len= struct.unpack('i', msg_len)[0] # int类型
msg= conn.recv(dic_len).decode('utf-8')
msg= json.loads(msg)
withopen(msg['filename'], 'wb') asf:
whilemsg['filesize'] >0:
content= conn.recv(1024)
msg['filesize'] -= len(content)
f.write(content)
conn.close()
sk.close()
# client端
importsocket
importos
importjson
importstruct
sk= socket.socket()
sk.connect(('127.0.0.1', 9000))
abs_path= r'你想要传输到服务器端的文件的绝对路径'
filename= os.path.basename(abs_path)
filesize= os.path.getsize(abs_path)
dic= {'filename': filename, 'filesize': filesize}
str_dic= json.dumps(dic)
b_dic= str_dic.encode('utf-8')
mlen= struct.pack('i', len(b_dic))
sk.send(mlen)
sk.send(b_dic)
withopen(abs_path, mode='rb') asf:
whilefilesize>0:
content= f.read(1024)
filesize-= len(content)
sk.send(content)
sk.close()