返回介绍

飞鸽传书 下载文件

发布于 2023-06-19 15:03:34 字数 2914 浏览 0 评论 0 收藏 0

飞鸽传书-下载文件

FeiQTcp.py(部分修改)


# -------添加---------
def download_file(file_info):
    """下载文件"""

    # 创建tcp套接字
    client_tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    # 构建需要发送的请求数据
    option = "%x:%x:%x" % (file_info['packet_id'], file_info['file_id'], 0)
    request_info = FeiQSend.build_msg(FeiQCoreData.IPMSG_GETFILEDATA, option)

    # 链接tcp服务器
    client_tcp_socket.connect((file_info['dest_ip'], FeiQCoreData.feiq_port))

    # 发送请求
    client_tcp_socket.send(request_info.encode("gbk"))

    # 新建文件,等待数据到来后,写入到文件中
    f = open(file_info['file_name'] ,"wb")  # 因为接收到的数据是二进制,需要使用wb

    recv_data_length = 0
    while True:
        recv_data = client_tcp_socket.recv(1024)
        if recv_data:
            f.write(recv_data)
        else:
            break

        # 如果接收到的数据超过了文件大小,那么也结束
        recv_data_length += len(recv_data)
        if recv_data_length >= file_info['file_size']:
            break 

    f.close()
    print("下载(%s)ok" % file_info['file_name'])


# -------修改---------
def get_file_msg_from_queue(file_queue):
    """从Queue 获取需要下载或者发送的文件信息"""
    while True:
        data_info = file_queue.get()
        if data_info['type'] == "download_file":
            # 下载文件请求
            print("需要下载。。。。", data_info['data'])

            # 使用tcp下载文件
            download_file(data_info['data'])

        elif data_info['type'] == "send_file":
            # 发送文件请求
            print("发送文件......", data_info['data'])

            FeiQCoreData.send_file_list.append(data_info['data'])

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文