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")
  • 相关阅读:
    集合
    WPF自定义控件--模拟手机密码输入控件,在输入时显示最后一个输入密码字符
    配置VS不生成XML和PDB文件
    Wlan常见命令(可以查看连接密码)
    云栖社区用机器人爬CSDN的文章?
    Marshal.PtrToStringAnsi中文乱码
    各种手工DIY
    yii2修改默认控制器
    3D模型网站分享
    SemanticZoom配合GridView组件的使用关键点
  • 原文地址:https://www.cnblogs.com/littlesky1124/p/9043313.html
Copyright © 2011-2022 走看看