如何解决Python TCP Socket 多文件传输 - 所有数据都在第一个文件中结束
我正在尝试编写一个可以传输多个文件的应用程序,但在接收端,所有数据都在第一个文件上,而其他数据则为 0B。
我定义了 4 个函数。其中两个发送和接收有关文件的详细信息(名称、大小和要传输的文件总数)和两个发送和接收文件。 关于文件和大小的详细信息被正确发送和接收,但接收者将所有文件的所有数据放在传输的第一个文件中(它的大小似乎是所有文件大小的总和),其余的似乎有0B。
发件人代码:
BUFFER_SIZE = 4096
def send_data(conn,file_name,file_size,numbers_files):
for i in range(numbers_files):
bar = tqdm.tqdm(range(file_size[i]),f"Sending {file_name[i]},to {ADDR}",unit="B",unit_scale=True,unit_divisor=BUFFER_SIZE) # progress bar
with open(file_name[i],"rb") as f: # open file in read and byte modes
while True:
data = f.read(BUFFER_SIZE) # read 4096 bytes at once
if not data: # if there is no more data,exit
break
conn.sendall(data) # send data
msg = conn.recv(BUFFER_SIZE).decode() # receive confirmation
bar.update(len(data)) # update progress bar
f.close() # close file
接收方代码:
BUFFER_SIZE = 4096
def receive_data(conn,file_info):
file_name = file_info[0]
file_size = file_info[1]
numbers_files = file_info[2]
for i in range(numbers_files):
bar = tqdm.tqdm(range(file_size[i]),f"Receiving {file_name[i]}",unit_divisor=BUFFER_SIZE)
with open(file_name[i],"wb") as f: # open file in write and byte modes
while True:
data = conn.recv(BUFFER_SIZE) # receives data
if not data:
f.close()
break
f.write(data) # write data in elements
conn.send("Data received".encode()) # send confirmation
bar.update(len(data)) # update the progress bar
conn.close
提前致谢!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。