• FTP-实例(Md5验证)


    import socket, os, hashlib
    
    server = socket.socket()
    server.bind(("localhost", 9999))
    server.listen()
    
    while True:
        conn, addr = server.accept()
        print("new conn", addr)
        while True:
            print("等待新指令")
            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()
    
                file_size = os.stat(filename).st_size  # 获取文件大小模块os.size
                conn.send(str(file_size).encode())  # send file size
                conn.recv(1024)  # wait for ack
                for line in f:
                    m.update(line)
                    conn.send(line)
                print("file md5",m.hexdigest())
                f.close()
                conn.send(m.hexdigest().encode())#发给客户端
            print("send done")
    
    server.close()
    

    上面是客户端FTP_server.py

    import socket,hashlib
    
    client = socket.socket()
    client.connect(("localhost", 9999))
    
    while True:
        cmd = input(">>:").strip()
        if len(cmd) == 0: continue
        if cmd.startswith("get"):
            client.send(cmd.encode())
            server_response = client.recv(1024)
            print("server response:", server_response)
            client.send(b"ready to recv file")
            file_total_size = int(server_response.decode())
            received_siez = 0
            filename = cmd.split()[1]  # 获取文件名字
            f = open(filename + ".new", "wb")
            m =hashlib.md5()
    
            while received_siez < file_total_size:
                if file_total_size - received_siez >1024:#要收不止一次
                    size = 1024
                else:#最后一次了,剩多少收多少
                    size =file_total_size - received_siez
                    print("last receive",size)
                data = client.recv(size)
                received_siez += len(data)
                m.update(data)
                f.write(data)
            else:
                new_file_md5 = m.hexdigest()
                print("file recv done:",file_total_size, received_siez)
                f.close()
            server_file_md5= client.recv(1024)
            print("server file md5", server_file_md5)
            print("client file md5", new_file_md5)
    
    client.close()
    

    上面是客户端FTP_client.py

  • 相关阅读:
    EntityFramework的安装
    利用Xml架构生成实体访问类
    C#生成XSD规范
    利用Vistual Studio自带的xsd.exe工具,根据XML自动生成XSD
    在.net中序列化读写xml方法的总结
    MVP设计模式的实现
    c#万能视频播放器
    libavcodec是一款LGPL自由软件编解码库,用于视频和音频数据的编解码工作
    用C#实现多种方式播放Wav声音
    Using the G711 standard
  • 原文地址:https://www.cnblogs.com/fuyuteng/p/9136731.html
Copyright © 2020-2023  润新知