zoukankan      html  css  js  c++  java
  • python 基于udp的文件传输

    SERVER端

    import json
    import os
    import socket
    import struct
    
    ip_port = ('192.168.1.101', 12345)
    sk = socket.socket()
    sk.bind(ip_port)
    sk.listen()
    
    buffer = 1024
    conn, addr = sk.accept()
    
    pack_len = conn.recv(4)
    head_len = struct.unpack('i', pack_len)[0]
    json_head = conn.recv(head_len).decode('utf-8')
    head = json.loads(json_head)
    filesize = head['filesize']
    with open(head['filename'], 'wb') as f:
        while filesize:
            print(filesize)
            if filesize >= buffer:
                content = conn.recv(buffer)
                filesize -= buffer
                f.write(content)
            else:
                content = conn.recv(filesize)
                f.write(content)
                break
    conn.close()
    sk.close()

    CLIENT端

    import json
    import struct
    import os
    import socket
    
    buffer = 4096
    ip_port = ('192.168.1.115', 12345)
    sk = socket.socket()
    sk.connect(ip_port)
    head = {'filepath': r'...',
        'filename': r'...',
        'filesize': None  }
    file_path = os.path.join(head['filepath'], head['filename'])
    filesize = os.path.getsize(file_path)
    head['filesize'] = filesize
    json_head = json.dumps(head)
    bytes_head = json_head.encode('utf-8')
    print(json_head)
    # 计算head长度
    head_len = len(bytes_head)
    pack_len = struct.pack('i', head_len)
    sk.send(pack_len)  # 先发报头长度
    sk.send(bytes_head)  # 再发送byte类型的报头
    with open(file_path, 'rb') as f:
        while filesize:
            print(filesize)
            if filesize >= buffer:
                content = f.read(buffer)  # 每次读出来的内容
                sk.send(content)
                filesize -= buffer
            else:
                content = f.read(filesize)
                sk.send(content)
                break
  • 相关阅读:
    VS2010+WPF+LINQ for MySQL
    WPF项目中解决ConfigurationManager不能用(转)
    DBLinq (MySQL exactly) Linq To MySql(转)
    循环左移实现
    C166 -MDH
    C166 8位字节位运算赋值-代码优化
    c166 -div
    js实现类似新闻条目人物简介不间断的滚动
    js实现新闻条目滚动效果
    php写杨辉三角算法
  • 原文地址:https://www.cnblogs.com/francischeng/p/9498395.html
Copyright © 2011-2022 走看看