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")
  • 相关阅读:
    敏捷实践:比每日会议更疯狂的半日会议!
    视频分享:编码与代码评审质量与现实的最激烈冲突点
    项目管理的“三边六拍”!
    挨踢项目求生法则需求篇
    恭喜一棵树博客开通
    盛大格子客或将继开心农场之后又一疯狂游戏
    离线安装.NETFRAMEWORK 3.5
    世界上尽有如此恶俗的软件还广为流传
    为什么是一棵树?
    java 之 注解
  • 原文地址:https://www.cnblogs.com/littlesky1124/p/9043313.html
Copyright © 2011-2022 走看看