zoukankan      html  css  js  c++  java
  • 4.21作业

    作业:

    编写cs架构的软件,实现客户端可以下载服务端的文件,如图片、视频、文本等

    服务端:

    import socketserver
    import os
    import json
    import struct
    
    
    class MyRequestHandler(socketserver.BaseRequestHandler):
        def handle(self):
            print(self.client_address)
            while True:
                try:
                    file_data = self.request.recv(1024)
                    if len(file_data) == 0: break
                    file_name = file_data.decode('utf-8')
                    BASE_SERVER_DIR = r'C:UsersasusPycharmProjects正课day36作业'
                    LOAD_PATH = os.path.join(BASE_SERVER_DIR, file_name)
                    total_size = os.path.getsize(LOAD_PATH)
                    header_dic = {
                        "filename": file_name,
                        "total_size": total_size,
                    }
                    json_str = json.dumps(header_dic)
                    json_str_bytes = json_str.encode('utf-8')
    
                    x = struct.pack('i', len(json_str_bytes))
                    self.request.send(x)
    
                    self.request.send(json_str_bytes)
    
                    with open(LOAD_PATH, mode='rb') as f:
                        for line in f:
                            self.request.send(line)
    
                except Exception:
                    break
            self.request.close()
    
    
    s = socketserver.ThreadingTCPServer(('127.0.0.1', 8081), MyRequestHandler)
    s.serve_forever()
    

    客户端:

    import struct
    import json
    from socket import *
    
    client = socket(AF_INET, SOCK_STREAM)
    client.connect(('127.0.0.1', 8081))
    
    while True:
        file_name = input('请输入下载的文件名>>:').strip()
        if len(file_name) == 0: continue
        client.send(file_name.encode('utf-8'))
    
        x = client.recv(4)
        header_len = struct.unpack('i', x)[0]
    
        json_str_bytes = client.recv(header_len)
        json_str = json_str_bytes.decode('utf-8')
        header_dic = json.loads(json_str)
        print(header_dic)
        total_size = header_dic["total_size"]
    
        recv_size = 0
        while recv_size < total_size:
            recv_data = client.recv(1024)
            recv_size += len(recv_data)
            with open(file_name, mode='ab') as f:
                f.write(recv_data)
    
  • 相关阅读:
    数组快速排序法
    javascript 的基本优化
    wdlinux mysql innodb的安装
    中文逗号替换为英文逗号 ,中英文逗号互换
    wdlinux 编译pdo_mysql
    nodejs 简单对mongodb 操作
    node.js 安装
    开启 mysql 的远程连接功能
    文件下载到本地
    webpack基础+webpack配置文件常用配置项介绍+webpack-dev-server
  • 原文地址:https://www.cnblogs.com/zhangtieshan/p/12749164.html
Copyright © 2011-2022 走看看