zoukankan      html  css  js  c++  java
  • socket创建的文件下载器

    客户端:

    # tcp_downloadfile_client.py
    
    import socket
    import sys
    
    
    def main():
        # 创建套接字
        tcp_client_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
        # 获取服务器的ip port 
        dest_ip = input('请输入要链接的服务器:')
        dest_port = int(input('请输入要链接的服务器的端口:'))
        dest_addr = (dest_ip,dest_port)
        # 链接到服务器
        tcp_client_socket.connect(dest_addr)
        print('——链接成功——')
        # 获取下载的文件名字
        filename_download = input('请输入要下载的文件名字:')
        # 将文件名字发送到服务器
        tcp_client_socket.send(filename_download.encode('utf-8'))
        # 接收文件中的数据
        recv_data = tcp_client_socket.recv(1024)
        # 保存接受到的数据到一个文件中
        if recv_data:
            with open('download'+filename_download,'wb') as f:
                f.write(recv_data)
            print('下载完成')
        else:
            print('返回为空,请重新输入文件名')
        # 关闭套接字
        tcp_client_socket.close()
    
    
    if __name__=='__main__':
        main()

    服务器端:

    # tcp_downloadfile_server.py
    import socket
    
    
    def send_file_to_client(new_client_socket,client_addr):
        # 接受客户端发送过来的要下载的文件名
        recv_file_data = new_client_socket.recv(1024).decode('utf-8')
        if recv_file_data:
            print('客户端{}要下载的文件是:{}'.format(client_addr,recv_file_data))
    
            print('下载中,请稍等')
            file_content = None
            # 打开这个文件,读取数据
            try:
                f = open(recv_file_data,'rb')
                file_content = f.read()
            except Exception as ret:
                print('服务器未存储客户要下载的文件{}'.format(recv_file_data))
            # 发送数据给客户端消息
            if file_content:
                new_client_socket.send(file_content)
            else:
                return file_content
        else:
            print("***欢迎再次访问***")
    
    
    def main():
        # 创建套接字
        tcp_server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
        # 绑定本地ip和port
        localaddr = ('',8080)
        tcp_server_socket.bind(localaddr)
        # 监听
        tcp_server_socket.listen(128)
        
        while True:
            print('————等待用户提交下载请求————')
            # 等带客户端并分配套接字
            new_client_socket,client_addr = tcp_server_socket.accept()
            print('——用户链接成功——')
            print('——正在等待用户输入查找文件——')
            # 调用发送文件函数,完成为客户端服务
            send_file_to_client(new_client_socket,client_addr)
            # 关闭套接字
            print('——完成服务——')
            print()
            new_client_socket.close()
        tcp_server_socket.close()
    
    
    if __name__=='__main__':
        main()
  • 相关阅读:
    怎么在excel单元格里原有的筛选里面添加新选项
    redis通信协议
    nginx路由文件配置
    R语言绘制相对性关系图
    Generator函数的语法
    360前端星计划作业
    工厂模式
    ReferenceError与undefined的区别
    for...in与点语法
    博客申请成功
  • 原文地址:https://www.cnblogs.com/nuochengze/p/12638066.html
Copyright © 2011-2022 走看看