zoukankan      html  css  js  c++  java
  • Python socket ssh接收大数据

    通过socket连续接收返回数据

    • Server服务端
    import socket,os
    server = socket.socket()
    server.bind(('localhost',9999))
    
    server.listen()
    
    while True:
        conn,addr = server.accept()
        print("new conn:",addr)
        while True:
            data = conn.recv(1024) #第一次没发完会放到io缓冲区
            if not data:
                print("客户端已断开")
                break
            print("执行指令",data.decode())
            cmd_res = os.popen(data.decode()).read() #接收字符串
            print("before send",len(cmd_res))
            if len(cmd_res) ==0:  #客户端断开后会,服务端收到的是空,数据为0
                cmd_res = "cmd has no output..."
            conn.send(str(len(cmd_res.encode())).encode("utf-8"))    #先发大小给客户端
            conn.send(cmd_res.encode("utf-8")) 
    server.close()
    
    • Clinet客户端
    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)
        received_size = 0
        received_data = b''  #创建空的b类型文件
        while received_size < int(cmd_res_size.decode()):    #如果没传完就继续循环
            data = client.recv(1024)  #收数据
            received_size += len(data) #每次收到的有可能小于1024,所以必须用len判断。
            received_data += data    #将数据叠加到b文件内
        else:
            print("cmd res receive done",received_size)
            print(received_data.decode())
    client.close()
    
    #recv接收数据后,会先存到缓冲区,缓冲区满了之后会自动send。
    #手动send是超时强制向客户端发送数据,不会等待recv填满缓冲区时自动发。
    #send发送数据 中文字符=3字节 英文=1字节 缓冲区会多发送len()字符个数。
  • 相关阅读:
    buildroot编译文件系统,出现mount: you must be root. can't open /dev/console: Permission denied这种错误。
    Ubuntu 18.04实现实时显示网速
    git 第一次push 出现fatal: 无法读取远程仓库。
    Sql2012 AlwaysOn
    SCVMM 安装
    POJ 3537 Crosses and Crosses
    HDOJ 1524 A Chess Game
    HDOJ 1907 John
    HDOJ 1848 Fibonacci again and again
    HDOJ 1536 S-Nim
  • 原文地址:https://www.cnblogs.com/xiangsikai/p/8127169.html
Copyright © 2011-2022 走看看