0

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

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

如果文件的块是 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()

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

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

4

1 回答 1

0

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

于 2013-09-29T22:52:47.223 回答