• python之ftp单线程模拟,client端


    __author__ = 'neu'
    import socket
    import hashlib
    client = socket.socket()                #初始化socket

    client.connect(('localhost',5999))          #选择链接的服务端地址端口  

    while True:                          
    cmd = input(">>:").strip()
    if len(cmd) == 0: continue            #如果输入空信息,重新输入
    if cmd.startswith('get'):              #如果以get开头 则发送命令
    client.send(cmd.encode('utf-8'))        
    server_response = client.recv(1024)        #接收数据长度
    print('server response:',server_response)    
    client.send(b"ready to recv file")        #发送确认
    file_total_size = int(server_response.decode('utf-8'))    
    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:      #如果剩余数据仍然大于1024,则继续循环
    size = 1024
    else:
    print('file_total_size',file_total_size)      #如果剩余数据小于或等于1024 则只接收剩余数据大小的数据
    print('received_size',received_size)        
    size = file_total_size - received_size      #计算剩余尺寸,这里windows有个问题,小于1024后,windows运行,只按照16字节接收数据。
    print('last rece:',size)              
    data = client.recv(size)          #接收数据
    received_size += len(data)      #计算接受的数据长度
    m.update(data)                #更新md5,开启md5后,速度显著变慢。
    f.write(data)        
    #print(file_total_size,received_size)
    else:
    print('file recv done',received_size,file_total_size)
    f.close()
    server_file_md5 = client.recv(1024)
    print(m.hexdigest())
    print(server_file_md5)
    client.close()
  • 相关阅读:
    MVC MVP MVVM三者的区别
    有状态组件 和 无状态组件的区别
    判断数据类型的几种方法
    bind的使用
    新时代web组件开发标准
    node.js上传文件
    封装的组件
    mysql数据库比较,各数据库不同之处
    node.js中使用Redis
    centos下安装nodejs的三种种方式
  • 原文地址:https://www.cnblogs.com/kcrist/p/9661184.html
Copyright © 2020-2023  润新知