zoukankan      html  css  js  c++  java
  • socket远程执行命令

    server类
    
    import socket
    import subprocess
    
    sk = socket.socket()  #创建socket
    
    #添加地址bind绑定
    address = ("127.0.0.1",9595)
    sk.bind(address)
    
    #支持多少人
    sk.listen(2)
    
    #接收客户端信息
    while True:
        conn,addr = sk.accept()
        print(addr,"这个位置是下一次另一个客户端打开后能自动接收")
        while True:
            try:
                cr = conn.recv(1024)
            except Exception as e:            #如果直接点击客户端直接点击
                print("jimao------",e)
                break
            # print(cr, "--nn------------")  # 判断客户端停止后返回值
            if not cr:break
    
            print(cr, "--------------")  # 判断客户端停止后返回值
            data = str(cr, "utf8")
            # print(str(cr))   #这个不能接收中文,只能接收字母数字
    
            # 发送信息
    
            #stdout 标准输出   PIPE 管道     Popen 打开进程文件指针
            #stdout=subprocess.PIPE子线程通过管道输出到主线程
    
            obj = subprocess.Popen(data,shell=True,stdout=subprocess.PIPE)
            obj_read = obj.stdout.read()   #接收指令data,再格式化输出
            print("iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii",type(obj))
    
            #计算长度,传递到客户端来判断客户端是否继续接收
            len_write = len(obj_read)
    
            conn.sendall(bytes(str(len_write),"utf8"))  #发送接收到的指令长度发送到客户端
    
            conn.sendall(obj_read)
    clinet类
    
    import socket
    sk = socket.socket() #创建socket对象
    
    #连接服务端
    address = ("127.0.0.1",9595)
    sk.connect(address)
    #发送信息到服务端
    while True:
        inp = input("这是客户端:")
        if inp == "88":
            exit()
        else:
            sk.send(bytes(inp,"utf8"))
    
        #接收信息
        sr = sk.recv(1024)  #
        print("00000000000000",type(sr))
        sr_len = int(str(sr,"utf8"))  #把传过来的byte长度转换成int型
        print("-----------",sr_len,"---",sr)
        if sr:
            num = bytes() #创建一个
            #接收的长度和总和和传过来的长短一样时就返回
            while len(num) != sr_len:
                # 再次接收文件
                sk_len = sk.recv(1024)  # 第二次接收byte型类型
                num += sk_len  # 把第二次接收的byte类型写进num中
                # print(str(sk_len,"gbk"),"
            print(str(num, "gbk"))
    
        else:
            break
  • 相关阅读:
    手动封装 时间选择器(只显示时分)
    页面跳转问题-button 确定提交按钮
    java String类型转 java.sql.time类型
    Mysql 时间处理
    微信-商城商品的图文/商品链接分享(后台数据合成图片+二维码生成)
    np.nan 1.0 2.0 df.apply
    pandas math.isnan
    df.apply
    pandas多条件行数据筛选
    pandas cumsum/sum calc percentage
  • 原文地址:https://www.cnblogs.com/TKOPython/p/12407746.html
Copyright © 2011-2022 走看看