简单的文件下载

socket 

server:

__author__ = 'zhengjun'

import socket,os,hashlib

server = socket.socket()
server.bind(("localhost",9999))

server.listen(1)

while True:
    conn,addr = server.accept()
    print("new conn:",addr)
    while True:
        print("等待新指令")
        date = conn.recv(1024)
        if not date:
            print("client is missing")
            break

        cmd,filename = date.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() ) #sent 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(m.hexdigest())


server.close()

client:

__author__ = 'zhengjun'

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

        file_total_size = int(server_response.decode())
        client.send(b"ready to recv file")
        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

            data = client.recv(size)
            received_size += len(data)
            m.update(data)
            f.write(data)
#            print("每次一次多少数据",received_size)
        else:
            new_file_md5 = m.hexdigest()
            print("file recv done")
            f.close()
        server_file_md5 = client.recv(1024)
        print("server file md5:",server_file_md5)
        print("client file md5:",new_file_md5)
client.close()

猜你喜欢

转载自www.cnblogs.com/armyz6666666/p/9056279.html