struct模块定制报头ftp实践

# server 接收端
# buffer 设置4096会 文件传不完 import socket import struct import json sk = socket.socket() sk.bind(('127.0.0.1',8090)) sk.listen() buffer = 1024 conn,addr = sk.accept() head_len = conn.recv(4) head_len = struct.unpack('i',head_len)[0] json_head = conn.recv(head_len).decode('utf-8') head = json.loads(json_head) filesize = head['filesize'] with open(head['filename'],'wb') as f: while filesize: if filesize >= buffer: content = conn.recv(buffer) f.write(content) filesize -= buffer else: content = conn.recv(filesize) f.write(content) break conn.close() sk.close()

# client 发送端
import socket
import struct
import os
import json

sk = socket.socket()
sk.connect(('127.0.0.1',8090))
buffer = 1024

head = {'filepath':r'K:\全栈-32678Hz',
        'filename':r'day01.zip',
        'filesize':None}
file_path = os.path.join(head['filepath'],head['filename'])
filesize = os.path.getsize(file_path)
head['filesize'] = filesize
json_head = json.dumps(head)
bytes_head = json_head.encode('utf-8')
#计算head的长度
head_len = len(bytes_head)
pack_len = struct.pack('i',head_len)

sk.send(pack_len)
sk.send(bytes_head)

with open(file_path,'rb') as f:
    while filesize:
        if filesize >= buffer:
            content = f.read(buffer)
            sk.send(content)
            filesize -= buffer
        else:
            content = f.read(filesize)
            sk.send(content)
            break

sk.close()

 

 

 

posted @ 2018-08-31 16:12  Woowo  阅读(108)  评论(0编辑  收藏  举报