zoukankan      html  css  js  c++  java
  • python day32--struct,文件上传下载

    一、struct模块

    可以把要发送的数据长度转换成固定长度的字节

    struct.pack('i',数据长度)

    struct.unpack('i',数据长度)

    二、上传下载文件作业

    server

    import struct
    import socket
    import json
    import os
    sk=socket.socket()
    sk.bind(('127.0.0.1',8080))
    sk.listen()
    conn,addr=sk.accept()
    header_len=conn.recv(4)
    header_len=struct.unpack('i',header_len)[0]
    header_by=conn.recv(header_len)
    header=json.loads(header_by)
    filename=header['filename']
    fileside=header['fileside']
    buffer=4096
    with open(filename,'wb') as f:
        while fileside:
            if fileside>=buffer:
                content=conn.recv(buffer)
                f.write(content)
                fileside-=buffer
                print(fileside)
            else:
                content=conn.recv(fileside)
                break
    conn.close()
    sk.close()

    client

    import struct
    import socket
    import json
    import os
    sk=socket.socket()
    sk.connect(('127.0.0.1',8080))
    header={'filepath':r'E:人工智能python课件基础班-就业班课件资料 -1-4位基础班  5-14就业班14-人工智能阶段:-机器学习-深度学习-实战项目30-36深度学习'
            ,'filename':r'对抗生成网络.zip'
            ,'fileside':None}
    file_path=os.path.join(header['filepath'],header['filename'])
    header['fileside']=os.path.getsize(file_path)
    fileside=header['fileside']
    json_header=json.dumps(header).encode('utf-8')
    header_len=struct.pack('i',len(json_header))
    sk.send(header_len)#发送报文的长度
    sk.send(json_header)#发送报文
    buffer=4096
    with open(file_path,'rb') as f:
        while  fileside:
            if fileside>=buffer:
                content=f.read(buffer)
                sk.send(content)
                fileside-=buffer
                print(fileside)
            else:
                content = f.read(fileside)
                sk.send(content)
                break
    sk.close()
  • 相关阅读:
    【BZOJ】3052: [wc2013]糖果公园
    【BZOJ】3757: 苹果树
    【BZOJ】1086: [SCOI2005]王室联邦
    【POJ】3648 Wedding
    【POJ】3678 Katu Puzzle
    【POJ】2296 Map Labeler
    【POJ】3207 Ikki's Story IV
    【HDU】1814 Peaceful Commission
    【HDU】2829 Lawrence
    【HDU】3480 Division
  • 原文地址:https://www.cnblogs.com/snackpython/p/10178601.html
Copyright © 2011-2022 走看看