zoukankan      html  css  js  c++  java
  • 一次完整的socket文件的传输

    • socket建立网络连接,注意文件分割后,传输完成的检测
    • pickle 封装文件信息:文件名、文件大小、md5码
    • os 文件路径、文件名、文件大小
    • hashlib md5码生成

    server端

    # Author:Winter Liu is coming!
    import socket
    import pickle
    import hashlib
    
    server = socket.socket()
    server.bind(("127.0.0.1", 10002))
    server.listen()
    conn, addr = server.accept()
    
    msg = conn.recv(1024)
    msg = pickle.loads(msg)
    filesize = msg["filesize"]
    m = hashlib.md5()
    with open(msg["filename"], "wb") as f:
        while filesize:
            data = conn.recv(4096)
            m.update(data)
            f.write(data)
            filesize -= len(data)
    if m.hexdigest() == msg["md5"]:
        print("translation complete!",m.hexdigest())
    else:
        print("transfer error!")
    
    server.close()

    client端

    # Author:Winter Liu is coming!
    import socket
    import pickle
    import os
    import hashlib
    
    client = socket.socket()
    server = ("127.0.0.1", 10002)
    client.connect(server)
    abs_path = r"C:PycharmProjectspython level upSocket网络编程	est.txt"
    filename = os.path.basename(abs_path)
    filesize = os.path.getsize(abs_path)
    m = hashlib.md5()
    with open(abs_path, "rb") as f:
        for line in f:
            m.update(line)
    dic = {"filename": filename, "filesize": filesize,"md5":m.hexdigest()}
    print(dic)
    msg = pickle.dumps(dic)
    client.send(msg)
    
    with open(abs_path, "rb") as f:
        while filesize:
            data = f.read(4096)
            client.send(data)
            filesize -= len(data)
    
    
    client.close()
  • 相关阅读:
    Property [*****] not found on type [com.erp.pojo.ErpSupplier]
    python 杀死线程的两种方式
    docker的学习之认识docker(一)
    Ubuntu下 MySQL不支持中文解决办法
    Django项目创建
    git介绍
    python 实现链表的逆置
    python 实现链表的增删改查(双向链表)
    python----super
    python面向对象
  • 原文地址:https://www.cnblogs.com/nmucomputer/p/12858698.html
Copyright © 2011-2022 走看看