使用 Python,我如何通过套接字流式传输与其他数据插入的文件块



我有一个二进制文件和一个原始数据列表。我想在文件块之间插入列表的元素,然后通过套接字传输它。我想将套接字用作服务器和客户端之间的管道。

我想发送文件块

和原始数据块,而不是构建一个新文件并将其作为一个整体发送,因为原始文件已经很大了。

如果文件的块是 f1, f2, f3, f4 并且列表的数据是 r1, r2, r3, r4,那么

我想传输以下序列:r1, f1, r2, f2, r3, f3, r4, f4.

这是我到目前为止得出的(假设每个块都是 1024 字节)

服务器:

import socket
list = [r1,r2,r3,r4]
host= ''
port = 8080
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((host, port))
s.listen(1)
conn = s.accept()

with open(filepath,'rb') as file:
   for i in range (0,len(list)):
      file.seek(i*1024)
      data = file.read(1024) + list[i]
      conn.sendall(data)  
conn.close()

客户:

import socket
host = 'localhost'
port = 8080
socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
socket.connect((host,port))

with open(filepath,'ab') as file:
   data = socket.recv(1056)
   if data:
       file.write(data)
   else:
       break
socket.close()

有没有更简单的方法在客户端和服务器之间实现"管道"?

在任何情况下,客户端都应该为每个(文件块、哈希)对打开一个新连接?

我认为

您正在尝试做的是通过连接序列化数据。幸运的是,这是一个很多人都有谷歌的问题,例如使用Protobuf,Python内置了Pickle,并且在Capt Proto中有一个新进入者。查看原型教程

相关内容

最新更新