• 作业


    基于TCP开发一款远程CMD程序
    客户端连接服务器后,可以向服务器发送命令
    服务器收到命令后执行,无论执行是否成功,无论执行几遍,都将执行结果返回给客户端

    方法一:通过os模块

    服务端:

    import socket,os
    
    
    serve = socket.socket()
    serve.bind(('127.0.0.1',9527))
    serve.listen(5)
    #conn相当于服务端往客户端的的管道
    
    while True:
        conn, addr = serve.accept()
        print(f'{addr}successful connection')
        while True:
    
            try:
                cmd = conn.recv(1024)
                print(cmd.decode('utf-8'))
                if cmd == 'q':
                    break
                if not cmd:
                    print('Client is not connected')
                    break
                print(f'The command is {cmd}')
                data = os.popen(cmd.decode('utf-8')).read()
                #os.popen() 方法用于从一个命令打开一个管道
    
                conn.send(data.encode('utf-8'))
    
                # send_msg = input('server:').encode('utf-8')
                # conn.send(send_msg)
            except Exception as e:
                print(e)
                break
        conn.close()
    
    

    客户端:

    import socket
    
    client = socket.socket()
    
    client.connect(('127.0.0.1',9527))
    
    
    while True:
        msg = input('client:').strip()
        client.send(msg.encode('utf-8'))
        if msg == 'q':
            break
        data = client.recv(1024).decode('utf8')
        print(data)
    client.close()
    

    方法二:通过subprocess模块

    服务端

    import socket
    import subprocess
    
    # cmd_obj = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    cmd_obj = socket.socket()
    cmd_obj.bind(('127.0.0.1',9527))
    cmd_obj.listen(5)
    while True:
        client,client_ip = cmd_obj.accept()
        print(client_ip)
    
        while True:
    
            cmd_script = client.recv(1024).decode('utf-8')
            if not cmd_script:
                continue
    
            if cmd_script == 'exit':
                break
    
            data = subprocess.Popen(cmd_script,shell = True,
                                   stdout = subprocess.PIPE,
                                   # stdin = subprocess.PIPE,
                                   stderr=subprocess.PIPE)
            stdout = data.stdout.read()
            stderr = data.stderr.read()
            res = stdout + stderr
            print(res)#这里得到的是二进制需要通过解码所以要在客户端以gbk进行解码,另外windows系统识别的是gbk格式的编码所以这个二进制是gbk转过来的
            client.send(res)
        client.close()
        break
    cmd_obj.close()
    

    客户端

    import socket
    
    client = socket.socket()
    
    client.connect(('127.0.0.1',9527))
    
    
    while True:
        msg = input('client:').strip()
        client.send(msg.encode('utf-8'))
        if msg == 'q':
            break
        data = client.recv(1024).decode('gbk')
        #data = bytes(data,encoding='utf-8')
        print(data)
    client.close()
    
    
  • 相关阅读:
    Ubuntu安装k8s
    SecureCRT连ubuntu
    硬盘安装ubuntu系统
    发布服务
    使用rancher2建k8s集群--个人学习记录
    spring boot 注解
    用STS构建spring boot
    使用js调用麦克风并录音
    全国省市区信息,mysql数据库记录
    ef core 3 migration
  • 原文地址:https://www.cnblogs.com/ghylpb/p/11694282.html
Copyright © 2020-2023  润新知