微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python TCP Socket 多文件传输 - 所有数据都在第一个文件中结束

如何解决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 举报,一经查实,本站将立刻删除。