socket发送大文件示例

# 客户端
import struct
import json
import socket
import os

client = socket.socket()
client.connect(('127.0.0.1', 8080))

file_size = os.path.getsize(r'/Users/jiboyuan/PycharmProjects/aboutsocket/10 解决粘包问题终极版.mp4')
file_path = r'/Users/jiboyuan/PycharmProjects/aboutsocket/10 解决粘包问题终极版.mp4'
data_dic = {
'file_name': '澳门最大线上赌场开业啦.mp4',
'file_size': file_size
}
header_json = json.dumps(data_dic)
header_bytes = header_json.encode('utf-8')
# 制作字典的报头
header = struct.pack('i', len(header_bytes))
# 发送报头
client.send(header)
# 发字典数据
client.send(header_bytes)
# 打开文件发送文件数据
with open(file_path,'rb') as f:
  for line in f:
    client.send(line)

# 服务端
import socket
import json
import struct

server = socket.socket()
server.bind(('127.0.0.1', 8080))
server.listen(5)

while True:
conn, addr = server.accept()
while True:
  try:
    header = conn.recv(4)
    if len(header) == 0:break
    dic_len = struct.unpack('i', header)[0]

    real_dic = json.loads(conn.recv(dic_len).decode('utf-8'))
    print(real_dic)
    file_name = real_dic.get('file_name')
    file_size = real_dic.get('file_size')
    recv_size = 0
    with open(file_name, 'wb') as f:
      while recv_size < file_size:
        recv_data = conn.recv(1024)
        f.write(recv_data)
        recv_size += len(recv_data)
  except ConnectionResetError:
    break

猜你喜欢

转载自www.cnblogs.com/shuchengyi/p/10817639.html
今日推荐