• Python分享之分分钟做个FTP


    Server:

    import socket,os,hashlib
    server=socket.socket()
    server.bind(("localhost",9999))#绑定要监听的端口
    server.listen()#开始监听
    while True:
        conn,addr=server.accept()#等待用户输入命令
        print("newconn",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
                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())#send md5
            print("send done")
    server.close()

    client:

    import socket,os,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_respose=client.recv(1024)#文件大小
            print("server respose",server_respose)
            client.send(b"ready to  recv file")
            file_total_size = int(server_respose.decode())
            received_size=0
            filename=cmd.split()[1]
            f = open(filename+".new","wb")#复制新文件
            m = hashlib.md5()
            while received_size<file_total_size:
                if file_total_size - received_size > 1024:#接收不止一次
                    size=1024
                else:#最后一次接收
                    size=file_total_size-received_size
                    print("last receive",size)
                data=client.recv(size)
                received_size+=len(data)
                m.update(data)
                f.write(data)
        else:
            new_file_md5=m.hexdigest()
            print("file recv done",received_size,file_total_size)
            f.close()
        server_file_md5=client.recv(1024)#最后接收服务器返回的md5
        print("server file md5",server_file_md5)
        print("client file md5",new_file_md5)
    client.close
  • 相关阅读:
    为MySQL的root用户设定密码
    Sublime Text 3安装Package Control失败
    从系统关机后主机仍在运行
    如何判断一个数是否是质数?
    python之lambda函数
    yum的一些命令使用方法
    NopCommerce架构分析-数据持久层
    NopCommerce架构分析-Cache的应用
    NopCommerce架构分析-源码结构和架构
    下载图片
  • 原文地址:https://www.cnblogs.com/AbeoHu/p/5859733.html
Copyright © 2020-2023  润新知