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()
  • 相关阅读:
    18.综合应用判断素数
    17.综合应用判断素数
    16.综合应用判断素数
    15.for循环的三个表达式是可以省略
    14.循环的理解
    myeclipse2014中搭建SSH环境注意事项
    Java web设计模式学习
    问题1:myeclipse中导入新JSP项目出现红色感叹号
    Java集合类学习笔记
    Java 复习第一部分:知识体系、变量、运算部分
  • 原文地址:https://www.cnblogs.com/nmucomputer/p/12663268.html
Copyright © 2011-2022 走看看