0
我有一个二进制文件和一个原始数据列表。我想插入文件块之间的列表元素,然后通过套接字传输它。我想使用套接字作为服务器和客户端之间的管道。使用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()
有没有更简单的实现方式客户端和服务器之间的“管道”?
在任何情况下,客户端应该为每个(文件块,散列)对打开一个新的连接?
如果您关闭连接,是的,必须做一个新的。至于数据,您可以使用2个套接字,一个用于文件,一个用于列表。或者构建自己的解析器(放置一个字符块,如MYDATA)并检查客户端,或者如果数据在1024b中分裂,读取1024作为数据,然后作为列表成员。但是,将列表作为固定长度的字符串发送,以便您知道数据再次开始的位置 – cox