zoukankan      html  css  js  c++  java
  • 一个简单的socket文件传输

    服务器端:

    import socket, hashlib
    
    server = socket.socket()
    server.bind(("localhost", 9999))
    server.listen()
    conn, addr = server.accept()
    print("connect is built! from", addr)
    m = hashlib.md5()
    while True:
        filename = conn.recv(1024).decode()
        # 以二进制形式打开
        with open(filename, "rb") as fin:
            file_data = fin.read()
        print("filename:", filename)
        # 传输文件长度和md5码
        m.update(file_data)
        file_info = str(len(file_data)) + " " + m.hexdigest()
        conn.send(file_info.encode())
        # 为避免粘包,接收一个确认消息
        res = conn.recv(1024).decode()
        print(res)
    
        conn.send(file_data)
    
    
    conn.close()

    客户端:

    # Author:Winter Liu is coming!
    import socket, hashlib
    
    client = socket.socket()
    client.connect(("localhost", 9999))
    m = hashlib.md5()
    
    while True:
        filename = input(">>>")
        client.send(filename.encode())
    
        file_info = client.recv(1024).decode().split(" ")
        file_length = int(file_info[0])
        file_md5 = file_info[1]
        print("the length of file is {}".format(file_length))
        print("the md5 of source file is {}".format(file_md5))
        client.send("file transfer is ready".encode())
        recv_file_length = 0
        recv_file = ""
        # 使用二进制文件,用于socket传输要方便的多
        with open("test.txt", "wb+") as fout:
            while recv_file_length != file_length:
                data = client.recv(4096)
                fout.write(data)
                recv_file_length += len(data)
                print(recv_file_length, len(data))
            fout.seek(0)
            f = fout.read()
        # md5码验证
        m.update(f)
        if file_md5 == m.hexdigest():
            print("file transfer is complete!")
        else:
            print("Error, md5 is wrong!")
    
    
    client.close()
  • 相关阅读:
    [蓝桥杯][基础练习VIP]完美的代价
    [蓝桥杯][基础练习VIP]分解质因数
    [蓝桥杯][基础练习VIP]Sine之舞
    [蓝桥杯][基础练习VIP]回形取数
    ZJOI 2006 书架
    HNOI2012 永无乡
    9.23 逃跑的牛Barn Running Away
    9.20 Magical multisets
    9.18 Roads on a kingdom
    【MySQL】MySQL复制表的两种方法
  • 原文地址:https://www.cnblogs.com/nmucomputer/p/12663268.html
Copyright © 2011-2022 走看看