python - 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="B", unit_scale=True,
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
提前致谢!
解决方案
推荐阅读
- php - 使用 simplexml_load_string() 解析 XML
- python-3.x - python加速一个简单的函数
- android - 在 android mvvm 中处理导航
- shopify - 如何使用for_loop将字符串分配给变量?
- linux - 如何使用 wget 自动下载 Instagram 页面
- r - 将日期时间列拆分为 R 中的部分
- c++ - 模板的定义必须先从模块中导入才需要
- python - 根据颜色值将多维 Numpy 数组转换为二维数组
- python - Plesk Django .py 文件显示在浏览器中。我怎样才能让它安全?
- javascript - GroupBy 在 Javascript 中使用 Lodash 或 Underscore 的多列