• 文件下载.py


    从一台计算机上下载文件到自己的计算机上

    #服务端
    from socket import *
    from multiprocessing import Process
    import os
    def main():
        # 服务端文件根目录
        ROOT = os.path.dirname(os.path.abspath(__file__))
        s = socket(AF_INET,SOCK_STREAM)
        #绑定ip和端口
        s.bind(('172.16.11.199',8181))
        #监听客户端的连接请求
        s.listen(10)
        #连接循环
        while True:
            print('请稍等...')
            print(ROOT)
            connect, address = s.accept()
            # # 查看服务器内文件
            list_files = str(os.listdir(ROOT))
            print(list_files)
            data1 = connect.recv(1024)
    
            if data1.decode('utf-8')=='下载':
                connect.send(str(list_files).encode('utf-8'))
    
            p = Process(target=talk,args=(connect,ROOT))
            p.start()
            p.join()
    
        s.close()
    
    def talk(connect,ROOT):
        #通信循环
        while True:
            name = connect.recv(1024)
            print(name)
            file_name = name.decode('utf-8')
            full_name = os.path.join(ROOT, file_name)
            print(full_name)
            # 判断文件是否存在
            if os.path.exists(full_name):
                # 文件大小
                file_size = os.path.getsize(full_name)
                # 将文件发送给客户端
                file_info = '%s|%d' % (file_name, file_size)
                connect.send(file_info.encode('utf-8'))
                # 打开
                with open(full_name, 'rb') as f:
                    # 假设已经发送的字节数
                    has_sent = 0
                    while has_sent != file_size:
                        # 读取
                        data = f.read(1024)
                        # 发送
                        connect.sendall(data)
                        # 递增
                        has_sent += len(data)
                        # 接收服务器响应信息
                        print(has_sent)
                # 接收服务上传成功消息
                data2 = connect.recv(1024)
                print(data2.decode('utf-8'))
            else:
                print('文件不存在')
    
    
    if __name__ == '__main__':
        main()
    
    
    
    from socket import *
    import os
    
    def main():
    
        c = socket(AF_INET,SOCK_STREAM)
        #连接到服务器
        c.connect(('172.16.11.199',8181))
        #服务端文件所在目录
        ROOT = os.path.dirname(os.path.abspath(__file__))
    
        # #输入要下载的文件名
        name = input('>>>输入下载两字即可得到服务器文件列表: ').strip()
    
        c.send(name.encode('utf-8'))
        # 接收文件名和文件大小
        data1 = c.recv(1024)
        s1 = str(data1.decode('utf-8'))
        print(s1)
    
        while True:
            file = input(">>请输入你要下载的文件名: ").strip()
            c.send(file.encode('utf-8'))
            data2 = c.recv(1024)
            str1 = data2.decode('utf-8')
            file_name, file_size = str1.split('|')
            full_name = os.path.join(ROOT, file_name)
            with open(full_name, 'ab') as f:
                has_rec = 0
                while has_rec != int(file_size):
                    # 接收文件数据
                    data2 = c.recv(1024)
                    f.write(data2)
                    has_rec += len(data2)
                    # print(has_rec)
                else:
                    c.send('下载成功'.encode('utf-8'))
    
    
        c.close()
    if __name__ == '__main__':
        main()
  • 相关阅读:
    Android_AsyncTask
    table隔行变色【转】
    添加对WCF的调用(内网状态下)。
    【转】IDEA 2017破解 license server激活
    C# LIst去重
    框架内事务的近期发现,以后再研究
    启动、停止、删除Windows服务
    软件项目总结中的经验总结
    iis最大连接数和队列长度
    在一个千万级的数据库查寻中,如何提高查询效率?
  • 原文地址:https://www.cnblogs.com/wshr210/p/10911136.html
Copyright © 2020-2023  润新知