zoukankan      html  css  js  c++  java
  • 几十行代码写一个简单的文件下载器

    服务器代码:

    import socket
    import os
    
    
    def main():
        # 创建socket
        server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        # 绑定本地信息
        server_socket.bind(('192.168.1.115', 8080))
        # 将套接字由主动变为被动
        server_socket.listen(128)
    
        # 等待客端连接
        new_client_socket = server_socket.accept()
        
        # 接收用户需要下载的文件名
        recv_file_name = new_client_socket.recv(1024).decode()
        
        # 判断当前路径下是否存在该文件
        if recv_file_name in os.listdir("."):
            # 以二进制的格式读取文件
            with open(recv_file_name, 'rb') as f:
                data = f.read()
            # 将文件发给客户端
            new_client_socket.send(data)
    
        # 关闭套接字
        new_client_socket.close()
        server_socket.close()
    
    if __name__ == '__main__':
        main()

    客户端代码:

    import socket
    
    # 创建socket
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    
    # 连接服务器
    server_addr = ('192.168.1.115', 8080)
    client_socket.connect(server_addr)
    print("连接成功")
    
    # 输入要下载的文件名
    file_name = input("请输入要下载的文件名:")
    
    # 发送文件下载请求
    client_socket.send(file_name.encode("utf-8"))
    
    # 接受服务器发送过来的数据,最大接受1024字节
    recv_data = client_socket.recv(1024*1024)
    
    # 如果接受到的数据再创建文件,否则不创建
    if recv_data:
        print("success")
        print(recv_data)
        with open("[new]"+file_name, "wb") as f:
            f.write(recv_data)
    else:
        print("failed")
    # 关闭套接字
    client_socket.close()
  • 相关阅读:
    systemd 介绍
    Goland读取配置文件--viper包
    Goland日志记录
    进程查询端口占用
    Python zip() 函数
    Jenkins权限管理(角色权限)
    Django ORM查询总结
    如何查看windows计算机重启记录
    Django ORM迁移
    Django中文乱码解决
  • 原文地址:https://www.cnblogs.com/colden/p/9766166.html
Copyright © 2011-2022 走看看