• python socket SSH


    server:

    # -*- coding: utf-8 -*-
    
    import socket,os
    
    server  = socket.socket()
    server.bind(('localhost',9999))
    
    server.listen()
    
    while True:
        conn, addr = server.accept()
        print("new connect:",addr)
        while True:
            data= conn.recv(1024)
            if not data:
                print("客户端已断开")
                break
            print("执行指令:"+data.decode())
            cmd_res = os.popen(data.decode()).read()
            if len(cmd_res) == 0:
                cmd_res="cmd has no output"
                #整数不能直接encode , 要先转成string 在encode
            conn.send(str(len(cmd_res.encode())).encode(encoding='utf_8', errors='strict') ) #先发送大小给客户端
            
            #解决粘包的问题
            client_ack = conn.recv(1024)
            conn.send(cmd_res.encode(encoding='utf_8', errors='strict'))
    
    server.close()

    client:

    # -*- coding: utf-8 -*-
    
    import socket
    client  = socket.socket()
    
    client.connect(('localhost',9999))
    
    while True:
        cmd = input(">>:").strip()
        if len(cmd)==0:continue
        
        client.send(cmd.encode(encoding='utf_8', errors='strict'))
        
        #接收命令结果的长度
        cmd_res_size = client.recv(1024)
        print("cmd_res_size is :",cmd_res_size.decode())
        #解决粘包问题
        client.send(b"send")
        received_size =0
        received_data = b""
        while received_size < int(cmd_res_size.decode()):
    #         print(received_size )
            cmd_res = client.recv(1024)
            #每次收到的字节数
            received_size = received_size+ len(cmd_res)
            received_data = received_data+cmd_res
        print(received_data.decode())
    client.close()
  • 相关阅读:
    浅谈MVVM
    组装数据和页面渲染
    Vuejs实现轮播图
    Vuejs选项卡案例
    选项卡案例
    js中用来操作数组的相关的方法
    js中用来操作字符串的相关的方法
    用逗号拼接字符串,并且去掉最后一个逗号
    微信分享链接或网站文章到微信朋友圈,缩略图片不显示,该如何解决?
    Spring 的介绍和目标
  • 原文地址:https://www.cnblogs.com/gaizhongfeng/p/7998304.html
Copyright © 2020-2023  润新知