zoukankan      html  css  js  c++  java
  • Python socket文件传送md5校验

    • soket_server
    import socket,os,hashlib
    server = socket.socket()
    server.bind(('0.0.0.0',9999))
    server.listen()
    while True:
        conn,addr = server.accept()
        print("new conn:",addr)
        while True:
            print("server on....")
            data = conn.recv(1024)
            if not data:
                print("客户端已断开")
                break
            cmd,filename = data.decode().split()
            print(filename)
            if os.path.isfile(filename): #是否是文件
                f = open(filename,"rb")
                m = hashlib.md5() #创建md5校验
                file_size = os.stat(filename).st_size #获取文件大小
                conn.send(str(file_size).encode()) #发送文件大小
                conn.recv(1024) #等待ACK交互防止粘包
                for line in f:
                    m.update(line) #递增加密文件
                    conn.send(line)
                print("file md5",m.hexdigest()) #打印16进制md5
                f.close()
                conn.send(m.hexdigest().encode())
            print("send done")
    server.close()
    

      

    • soket_client
    import socket
    import hashlib
    client = socket.socket()
    client.connect(('localhost',9999))
    while True:
        cmd = input(">>:").strip()
        if len(cmd) == 0:continue
        if cmd.startswith("get"): #是否以get开头
            client.send(cmd.encode())
            server_response = client.recv(1024)
            print("server respoense:",server_response)
            client.send(b"ready to recv file")  #发送ACK确认,交互防止send粘包
            file_total_size = int(server_response.decode())
            received_size = 0
            filename = cmd.split()[1]
            f = open(filename + ".new","wb")
            m = hashlib.md5() #使用md5加密
            while received_size < file_total_size:  #判断总数据比递增接收数据大就成立
                if file_total_size - received_size > 1024: #数据比recv大就成立
                   size = 1024
                else: #最后一次,还剩多少
                   size = file_total_size - received_size  #求出剩余recv数值
                   print("last receive:",size) #最后一次收了多少
                data = client.recv(size)
                received_size += len(data)  #递增接收数据
                m.update(data) #递增接收数据并加密md5
                f.write(data)
                #print(file_total_size,received_size) #每次发送大小
            else:
                new_file_md5 = m.hexdigest()
                print("file recv done",received_size,file_total_size)
                f.close()
            server_file_md5 = client.recv(1024)
            print("server file md5:",server_file_md5)
            print("client file md5:",new_file_md5)
    client.close()
    

      

  • 相关阅读:
    让 .Net 程序 脱离 .net framework框架 运行的方法 转
    MySpaces性能提高的过程转
    AskNet 内容查询系统 筹备中
    关于自定义表单的一些想法
    Url重写
    show一下我的办公桌
    IronRuby 初览
    微软将终止对SQL2000的支持
    WCF 消息交换 转
    感受刘德华的努力
  • 原文地址:https://www.cnblogs.com/xiangsikai/p/8137508.html
Copyright © 2011-2022 走看看