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()
  • 相关阅读:
    .Uva&LA部分题目代码
    历史遗留问题列表
    hdu5681 zxa and wifi
    算法心得2:关于k个最小和问题的思考
    算法心得1:由$nlogn$复杂度的LIS算法引起的思考
    Codeforces Round #336 Marbles
    HDU 2571 命运
    POJ 3630 && HDU 1671 Phone list(静态字典树)
    静态字典树和动态字典树模板
    双向广搜
  • 原文地址:https://www.cnblogs.com/nmucomputer/p/12858698.html
Copyright © 2011-2022 走看看