首页 > 解决方案 > 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

提前致谢!

标签: pythonsocketsnetworkingfile-transfer

解决方案


推荐阅读