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

    服务端
    
    import socket
    import struct
    import json
    import os
    
    
    server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    
    server.bind(('172.0.0.1', 8080))
    
    server.listen(5)
    
    while True:
        conn, client_addr = server.accept()
    
        while True:
            try:
    
                file = conn.recv(1024)
                if len(file) == 0:
                    break
    
                # 判断下载的文件存在与否
                if not os.path.exists(file):
                    conn.send('下载链接不存在'.encode('gbk'))
                    break
    
                # 打开文件读取数据
                with open(file, 'rb') as f:
                    res = f.read()
    
                    res_len = len(res)
    
                # 制作头
                header_dic = {"total_size": res_len}
    
                json_str = json.dumps(header_dic)
                json_str_bytes = json_str.encode('gbk')
    
                # 发送头的长度
                x = struct.pack('i', len(json_str_bytes))
                conn.send(x)
    
                # 发送头的数据
                conn.send(json_str_bytes)
    
                conn.send(res)
            except Exception:
                break
        conn.close()
    
    
    
    客户端
    
    import socket
    import json
    import struct
    
    
    client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    
    client.connect(('172.0.0.1', 8080))
    
    while True:
        file = input('请输入你要下载的文件名').strip()
    
        if len(file) == 0:
            continue
    
        client.send(file.encode('gbk'))
    
        # 先接收一个4,准备拿出头部信息的长度
        x = client.recv(4)
        header_len = struct.unpack('i', x)[0]
    
        # 有了头的长度之后,去拿头部信息里面的total_size长度
        json_str_bytes = client.recv(header_len)
        json_str = json_str_bytes.decode('gbk')
        header_dic = json.loads(json_str)
        total_size = header_dic["total_size"]
    
        recv_size = 0
        while total_size > recv_size:
            recv_data = client.recv(1024)
            recv_size += len(recv_data)
            print(recv_data.decode('gbk'), end='')
        print()
  • 相关阅读:
    消息中间件的研究(二) RabbitMQ应用场景分析
    消息中间件的研究 (一)
    35. 搜索插入位置
    374. 猜数字大小
    278. 第一个错误的版本
    367. 有效的完全平方数
    1.Storm概述简介
    7.MapReduce操作Hbase
    6.Hbase 原理
    5.Hbase API 操作开发
  • 原文地址:https://www.cnblogs.com/yding/p/12749026.html
Copyright © 2011-2022 走看看