问题描述
我正在尝试编写一个可以传输多个文件的应用程序,但在接收端,所有数据都在第一个文件上,而其他数据则为 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 (将#修改为@)