• python--FTP 上传视频示例


    复制代码
    # 服务端
    import json
    import socket
    import struct
    server = socket.socket()
    server.bind(('127.0.0.1',8001))
    server.listen()
    conn,addr = server.accept()
    #首先接收文件的描述信息的长度
    struct_data_len = conn.recv(4)
    data_len = struct.unpack('i',struct_data_len)[0]
    # 通过文件信息的长度将文件的描述信息全部接收
    print('data_len>>>',data_len)
    file_info_bytes = conn.recv(data_len)
    #将文件描述信息转换为字典类型,以便操作
    file_info_json = file_info_bytes.decode('utf-8')
    file_info_dict = json.loads(file_info_json) #{'file_name': 'aaa.mp4', 'file_size': 24409470}
    print(file_info_dict)
    #统计每次接收的累计长度
    recv_sum = 0
    #根据文件描述信息,指定文件路径和文件名称
    file_path = 'D:s18jj' + '\' + file_info_dict['file_name']
    #接收文件的真实数据
    with open(file_path,'wb') as f:
        #循环接收,循环结束的依据是文件描述信息中文件的大小,也是通过一个初始值为0的变量来统计
        while recv_sum < file_info_dict['file_size']:
            every_recv_data = conn.recv(1024)
            recv_sum += len(every_recv_data)
            f.write(every_recv_data)
    复制代码

      

    复制代码
    # 客户端
    import os
    import socket
    import json
    import struct
    client = socket.socket()
    client.connect(('127.0.0.1',8001))
    #统计文件大小
    file_size = os.path.getsize(r'D:python_workspace_s18day029aaa.mp4')
    #统计文件描述信息,给服务端,服务端按照我的文件描述信息来保存文件,命名文件等等,现在放到一个字典里面了
    file_info = {
        'file_name':'aaa.mp4',
        'file_size':file_size,
    }
    #由于字典无法直接转换成bytes类型的数据,所以需要json来将字典转换为json字符串.在把字符串转换为字节类型的数据进行发送
    #json.dumps是将字典转换为json字符串的方法
    file_info_json = json.dumps(file_info)
    
    #将字符串转换成bytes类型的数据
    file_info_byte = file_info_json.encode('utf-8')
    
    #为了防止黏包现象,将文件描述信息的长度打包后和文件的描述信息的数据一起发送过去
    data_len = len(file_info_byte)
    data_len_struct = struct.pack('i',data_len)
    
    #发送文件描述信息
    client.send(data_len_struct + file_info_byte)
    
    #定义一个变量,=0,作为每次读取文件的长度的累计值
    sum = 0
    #打开的aaa.mp4文件,rb的形式,
    with open('aaa.mp4','rb') as f:
        #循环读取文件内容
        while sum < file_size:
            #每次读取的文件内容,每次读取1024B大小的数据
            every_read_data = f.read(1024)
            #将sum累加,统计长度
            sum += len(every_read_data)
            #将每次读取的文件的真实数据返送给服务端
            client.send(every_read_data)
    复制代码
  • 相关阅读:
    eBay商家五大市场调研工具
    最新Android ADT, SDK, SDK_tool等官方下载说明
    Android——关于ListView控件的使用方法
    Auto CAD的相关问题·绘图单位
    淘宝数据分析之数据分析工具的三个需求层次
    电阻器阻值标识的相关知识
    Android软件开发之ListView 详解
    解决android模拟器划动手势时自动输入字母“c” 的问题
    争辩:关于输出大电流的移动电源给小电流的手机充电的问题
    关于C51的中断函数要注意的几个问题
  • 原文地址:https://www.cnblogs.com/uiys/p/10673227.html
Copyright © 2020-2023  润新知