zoukankan      html  css  js  c++  java
  • 【python】文件下载---基础版

    基于TCP协议的基础版本,不支持大文件

    Client.py

    import socket
    
    def main():
        # 1. 创建套接字
        tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    
        # 2. 获取服务器的ip port
        # dest_ip = input("请输入下载服务器的IP:")
        # dest_port = int(input("请输入下载服务器的Port:"))
    
        # 3. 链接服务器
        # tcp_socket.connect((dest_ip, dest_port))
        tcp_socket.connect(('127.0.0.1', 7890))
    
        # 4. 获取下载的文件名字
        download_file_name = input("请输入要下载的文件名字: ")
    
        # 5. 将文件名字发送到服务器
        tcp_socket.send(download_file_name.encode('utf-8'))
    
        # 6. 接收文件中的数据
        recv_data = tcp_socket.recv(1024)  # 1024--->1k
    
        # 7. 保存接收到的数据到文件中
        if recv_data:
            with open("[新]"+download_file_name,"wb") as f:
                f.write(recv_data)
    
        # 8. 关闭套接字
        tcp_socket.close()
    
    if __name__ == '__main__':
        main()
    

    Server.py

    import socket
    
    def send_file_2_client(new_client_socket, client_addr):
        # 1. 接收客户端发送过来的,要下载的文件名
        file_name = new_client_socket.recv(1024).decode('utf-8')
        print("客户端[%s]需要下载的文件是:%s" % (str(client_addr), file_name))
    
        file_content = None
        # 2. 打开这个文件,读取数据
        try:
            f = open(file_name, "rb")
            file_content = f.read()
            f.close()
        except Exception as ret:
            print("没有要下载的文件[%s]" % file_name)
    
        # 3. 发送文件的数据给客户端
        # new_client_socket.send("hahahah".encode('utf-8'))  # 调试的时候,先给发个假得
        if file_content:
            new_client_socket.send(file_content)
    
    def main():
        # 1. 创建套接字
        tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    
        # 2. 创建监听
        tcp_server_socket.bind(("", 7890))
    
        # 3. 套接字被动监听数量
        tcp_server_socket.listen(128)
    
        while True:
            print("wait...")
            # 获取客户端socket,客户端连接信息
            new_client_socket, client_addr = tcp_server_socket.accept()
    
            # 调用发送文件函数
            send_file_2_client(new_client_socket, client_addr)
    
            # 关闭套接字
            new_client_socket.close()
    
        tcp_server_socket.close()
    
    
    
    if __name__ == '__main__':
        main()
    
  • 相关阅读:
    [C#]RichTextBox实现拖放
    [C#]WinForm动态删除控件 Controls.Remove()
    [C#]WinForm 中 comboBox控件之数据绑定
    [C#.Net]KeyDown(KeyUp)和KeyPress的区别
    [C#.NET]最简单的实现文本框的水印效果
    [C#.Net]对WinForm应用程序的App.config的使用及加密
    Spring MVC异常处理详解
    MAC与HMAC的介绍及其在AWS和Azure中的应用
    isDebugEnabled有什么用?
    在Mysql中Using filesort代表什么意思?
  • 原文地址:https://www.cnblogs.com/liudianer/p/11764964.html
Copyright © 2011-2022 走看看