zoukankan      html  css  js  c++  java
  • 网络编程大文件传输

                     实现大文件传输

      就是说服务端给客户端发数据之前,先计算一下给客户端要发多少数据,我先判断 len 一下,就 ok 了,先让客户端知道服务端发送过来的大小,比如说发过来的是5k大小,客户端接收到了这个5k大小以后,就知道需要接收多少次了,循环接收,直到5k数据全部接收完毕为止

                客户端代码:和服务端

                这个里面有中文字节的坑,可以看到有中文的len前后就不一样, 中文字符=3个字节

    import socket
    
    client = socket.socket()
    client.connect(("localhost", 9999))
    
    while True:
        cmd = input(">>>:").strip()
        if len(cmd) == 0: continue
        client.send(cmd.encode("utf-8"))
        cmd_res_size = client.recv(1024)  # 接收命令的长度
        print("命令结果大小:", cmd_res_size.decode())
        recevied_size = 0  # 接收客户端发来数据的计算器
        recevied_data = b''  # 客户端每次发来内容的计数器
        while recevied_size < int(cmd_res_size.decode()):  # 当接收的数据大小 小于 客户端发来的数据
            cmd_res = client.recv(1024)
            recevied_size += len(cmd_res)  # 每次收到的服务端的数据有可能小于1024,所以必须用len判断
            recevied_data += cmd_res
        else:
            print(recevied_data.decode("utf-8", "ignore"))
            print("cmd res receive done ....", recevied_size)

    import socket, os
    
    server = socket.socket()
    server.bind(("localhost", 9999))
    server.listen(5)
    while True:
        conn, addr = server.accept()
        print("new addr:", addr)
        print('conn',conn)
        while True:
            data = conn.recv(1024)
            if not data:
                print("客户端已断开")
                break
            print("执行指令:", data)
            cmd_res = os.popen(data.decode()).read()
            print("before send:", len(cmd_res))
            if len(cmd_res) == 0:
                cmd_res = "cmd has no output...."
            conn.send(str(len(cmd_res.encode())).encode())  # 发送服务端发送给客户端数据的长度
            conn.send(cmd_res.encode("utf-8"))  # 发送服务端的数据
            print("send done")
  • 相关阅读:
    [书目20170308]你能为公司带来什么
    [书目20170308]卓有成效的管理者
    [转]NLog Layout Renderers ${}
    转:NLog 自定义日志内容,写日志到数据库;修改Nlog.config不起作用的原因
    [转]Using NLog for ASP.NET Core to write custom information to the database
    [转]快速入门系列--WebAPI--01基础
    [转]NLog学习笔记二:深入学习
    [转]Create Custom Exception Filter in ASP.NET Core
    弟子规
    论语
  • 原文地址:https://www.cnblogs.com/littlesky1124/p/9043313.html
Copyright © 2011-2022 走看看