• socket接受大的数据


    socket_server_ssh:

    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)
            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("utf-8") )  #先发大小给客户端
            client_ack = conn.recv(1024)  # wait client to confirm
            conn.send(cmd_res.encode("utf-8"))
            print("send done")
    server.close()

    socket_server_client:

    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)
        client.send("准备好接收了,可以发了".encode("utf-8"))
        received_size = 0
        received_data = b''
        while received_size < int(cmd_res_size.decode()):
            data = client.recv(1024)
            received_size += len(data) #每次收到的有可能小于1024,所以必须用len判断
            received_data += data
        else:
            print("cmd res receive done...",received_size)
            print(received_data.decode())
    
    client.close()
  • 相关阅读:
    ProtoBuf开发者指南(转)
    kafka的c/c++高性能客户端librdkafka简介
    SQL的执行顺序:
    zookeeper与卡夫卡集群搭建
    记一次ping: unknown host错误
    nginx服务器的rewrite功能
    nginx做http向https的自动跳转
    jQuery数据缓存
    jQuery的无new构建
    位操作符的计算优势
  • 原文地址:https://www.cnblogs.com/Cohen/p/8711153.html
Copyright © 2020-2023  润新知