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()
    

      

  • 相关阅读:
    js 改变颜色值
    React之使用Context跨组件树传递数据
    App.js实现使用js开发app的应用,此文是中文文档
    转: CSS3 @media 用法总结
    转: 如何用手机访问电脑本地 localhost 网页或者服务器, 以调试web项目
    js 替换字符串中所有匹配的字符
    转:display:flex不兼容Android、Safari低版本的解决方案 【flex布局】
    转:HTML5页面如何在手机端浏览器调用相机、相册功能
    文本相似度度量
    idea中maven中jdk版本的选择(转)
  • 原文地址:https://www.cnblogs.com/xiangsikai/p/8137508.html
Copyright © 2011-2022 走看看