• 10.17小作业 基于TCP开发一款远程CMD程序


    基于TCP开发一款远程CMD程序
    客户端连接服务器后,可以向服务器发送命令
    服务器收到命令后执行,无论执行是否成功,无论执行几遍,都将执行结果返回给客户端
    注意: 执行系统指令使用subprocess模块完成.
    本题目不考虑接收时的粘包问题

    # 客户端
    import socket
    
    client = socket.socket()
    client.connect(('127.0.0.1',8889))
    
    while True:
        cmd = input('请发送命令:').strip()
        if len(cmd) == 0:
            continue
    
        if cmd == 'q':
            client.send(b'q')
            break
    
        cmd = cmd.encode('utf-8')
        client.send(cmd)
    
        byte_data = client.recv(1024)
        print(byte_data.decode('gbk'))
    
    # 服务端
    
    import socket
    import subprocess
    
    server = socket.socket()
    server.bind(('127.0.0.1',8889))
    server.listen(5)
    while True:
        conn,addr = server.accept()
    
        while True:
            try:
                cmd = conn.recv(1024)
                if len(cmd) == 0:
                    continue
    
                cmd = cmd.decode('utf-8')
                if cmd == 'q':break
                obj = subprocess.Popen(cmd,shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)  # 这里cmd必须是字符串类型,不是bytes类型的字符串
                print(obj)  # <subprocess.Popen object at 0x00000000029C6D30>   对象
    
                # print(obj.stdout.read())  # b'' 没赋值变量名返回的是空
                success = obj.stdout.read()  # 必须赋值一个变量才有值
                # print(success)  #  返回的是二进制,可以直接基于网络传输
    
                # print(obj.stderr.read())  # b'' 没赋值变量名返回的是空
                error = obj.stderr.read()
                # print(error)  # 返回不正确命令的报错信息
    
                if success:
                    conn.send(success)
                else:
                    conn.send(error)
            except Exception as e:  # 捕获客服端人为断开连接,不至于服务端报错率而断开,毕竟服务端是24h不间断服务的
                print(e)
                break
        conn.close()
    
    
    
  • 相关阅读:
    【CF875E】Delivery Club 二分+线段树
    【CF316G3】Good Substrings 后缀自动机
    【BZOJ3413】匹配 离线+后缀树+树状数组
    【BZOJ2658】[Zjoi2012]小蓝的好友(mrx) 平衡树维护笛卡尔树+扫描线
    【BZOJ5133】[CodePlus2017年12月]白金元首与独舞 矩阵树定理
    【LOJ6254】最优卡组 堆(模拟搜索)
    面试问题总结
    Nginx基本配置
    Visual Studio Enterprise 2015下载 Update3
    .net 中生成二维码的组件
  • 原文地址:https://www.cnblogs.com/zhangchaocoming/p/11694651.html
Copyright © 2020-2023  润新知