• socket 基于udp实现远程执行命令


    server.py

    # socket 基于udp实现远程执行命令
    
    from socket import *
    import subprocess
    
    ip_port = ('127.0.0.1', 8080)
    buffer_size = 1024
    
    udp_server = socket(AF_INET, SOCK_DGRAM)
    udp_server.bind(ip_port)
    
    while True:
    
        cmd, addr = udp_server.recvfrom(buffer_size)
    
        cmd = cmd.decode('utf-8')
        print('收到客户端命令', cmd)
        res = subprocess.Popen(cmd, shell=True,  # 第一个参数:命令字符串,第二个参数指定由shell处理
                               stderr=subprocess.PIPE,  # 将基本的输入、输出及错误都放入管道
                               stdin=subprocess.PIPE,  # 这些在管道里的信息都是字节形式,编码为utf-8
                               stdout=subprocess.PIPE
                               )
        err = res.stderr.read()  # 定义一个err变量接收基本的错误信息
        if err:  # 如果错误信息不为空
            cmd_res = err  # 输出的结果为基本的错误信息
        else:
            cmd_res = res.stdout.read()  # 输出的结果为基本的输出信息
    
        if not cmd_res:  # 有些命令无返回结果,需要进行判断
            cmd_res = '该命令没有返回结果'.encode('gbk')
        udp_server.sendto(cmd_res, addr)  # 向客户端发送执行的结果
    
    
    udp_server.close()

    client.py

    from socket import *
    
    ip_port = ('127.0.0.1', 8080)
    buffer_size = 1024
    
    udp_client = socket(AF_INET, SOCK_DGRAM)
    
    while True:
        cmd = input('请输入命令').strip()
        if not cmd: continue
        if cmd == 'quit': break
        cmd = cmd.encode('utf-8')
        udp_client.sendto(cmd, ip_port)
        cmd_res, addr = udp_client.recvfrom(buffer_size)  # 这里的值过小会接收不全服务端发来的信息
        print('命令执行的结果是', cmd_res.decode('gbk'))  # windows系统默认编码为gbk
    
    udp_client.close()
  • 相关阅读:
    在Windows Phone应用中使用Google Map替代Bing Map
    《从入门到精通:Windows Phone 7应用开发》
    判断最小割的唯一性
    ASP.NET页面生命周期
    SQL排序
    window.open
    VS2008中英文转换
    asp.net下载文件的常用方法
    TSQL Convert转换时间类型
    TreeView
  • 原文地址:https://www.cnblogs.com/dangrui0725/p/9483556.html
Copyright © 2020-2023  润新知