# 获取二进制字典报头
# 获取二进制字典长度
# 将二进制字典的长度生成一个固定4字节长度的bytes
# 发给另一端 # 另一端固定 recv(4),再 unpack,得到二进制字典长度
# recv(二进制字典长度),得到二进制字典
import struct
import json
import socket
socket_obj = socket.socket()
socket_obj.bind(('localhost', 8000))
socket_obj.listen(1024)
connection, address = socket_obj.accept()
# 先固定接收4字节
struct_from_client = connection.recv(4)
# 解包得到二进制字典长度
bytes_len = struct.unpack('i', struct_from_client)[0]
# 根据长度接收二进制字典
dic_str = connection.recv(bytes_len).decode('utf8')
dic_header = json.loads(dic_str)
# 二进制追加写入的方式
with open(dic_header['filename'], 'ab') as f:
file_size = dic_header['file_size']
buffer_len = dic_header['buffer_len']
while file_size:
if file_size < buffer_len:
data_from_client = connection.recv(file_size)
f.write(data_from_client)
break
data_from_client = connection.recv(buffer_len)
f.write(data_from_client)
file_size -= buffer_len
connection.close()
socket_obj.close()
# 先固定接收4字节
# 解包得到二进制字典长度
# 根据长度接收二进制字典
import struct
import json
import socket
import os
socket_obj = socket.socket()
socket_obj.connect(('localhost', 8000))
dic_header = {
'filename': 'linux.mp4',
'file_dir': r'D:/',
'file_size': '',
'buffer_len': 256 # 每次接收多少字节
}
file_path = os.path.join(dic_header['file_dir'], dic_header['filename'])
# 文件大小
file_size = os.path.getsize(file_path)
dic_header['file_size'] = file_size
dic_json = json.dumps(dic_header)
# 获取二进制字典
dic_bytes = bytes(dic_json, encoding='utf8')
# 获取二进制字典长度
dic_len = len(dic_bytes)
# 将二进制字典的长度生成一个固定4字节长度的bytes
struct_to_server = struct.pack('i', dic_len)
# 发给另一端
# 另一端固定 recv(4),再 unpack,得到二进制字典长度
socket_obj.send(struct_to_server)
# 另一端 recv(二进制字典长度),将获得 bytes 字典
socket_obj.send(dic_bytes)
with open(file_path, 'rb') as f:
buffer_len = dic_header['buffer_len']
while file_size:
if file_size < buffer_len:
data_to_server = f.read(file_size)
socket_obj.send(data_to_server)
break
data_to_server = f.read(buffer_len)
socket_obj.send(data_to_server)
file_size -= buffer_len
socket_obj.close()
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。