zoukankan      html  css  js  c++  java
  • 文件传输 FTP


    import hashlib
    import socket ,os,time
    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("等待新指令")
    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()


    #===================================

    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"):
    client.send(cmd.encode())
    server_response = client.recv(1024)
    print("servr response:", server_response)
    client.send(b"ready to recv file")
    file_total_size = int(server_response.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)
    # 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()

  • 相关阅读:
    sl学习
    xc笔记
    1_2_3_4_5 Html-Css
    linux服务器架设--学习笔记
    注解学习
    关于ruby gem源更新安装问题
    css3:2D与3D变形
    css3关键帧动画以及兼容性策略
    css3背景,蒙版,倒影以及过度
    阴影边框以及渐变
  • 原文地址:https://www.cnblogs.com/rongye/p/9973350.html
Copyright © 2011-2022 走看看