zoukankan      html  css  js  c++  java
  • socket编程执行远程命令例子:_python

    服务端:

    复制代码
    import socket,os,subprocess
    server=socket.socket()
    server.bind(('localhost',1234)) #绑定端口
    server.listen() #监听
    while True:
        print('等待连接')
        conn,addr=server.accept() #等客户端,返回值就是连接对象实例,和客户端地址
        while True:
            data=conn.recv(1024)
            print(data)
            if not data: #客户端是否断开连接判断
                print('已断开连接')
                break
            #a=subprocess.Popen(data.decode('utf-8'),shell=True,stdout=subprocess.PIPE) 
            #res=a.stdout.read()#第二种执行命令返回结果的方法
            res=os.popen(data.decode('utf-8')).read() #执行命令返回结果
            print('res',res)  #因为中文的原因,windows上的接收大小与源文件大小不一样需要提前encode
            if len(res)==0:
                res='cmd has no output'
            data_len=len(res.encode())  #这里需要先encode(),然后再计算大小,不然与客户端计算大小方式有出入
            print(data_len)
            conn.send(str(data_len).encode())  #先发送本次结果数据大小给客户端验证
            conn.sendall(res.encode()) #相当于循环发送完整结果
    复制代码

    客户端:

    复制代码
    import socket
    client=socket.socket() #声明socket类型,生成对象
    client.connect(('localhost',1234))
    while True:
        msg=input('>>')
        if len(msg)==0:continue
        client.send(msg.encode('utf-8'))  #只能发送bytes类型
        data_len=client.recv(1024)
        print(data_len)
        receive_len=0
        while int(data_len.decode())>receive_len:  #循环完整接收本次命令的结果
            data=client.recv(10240)
            receive_len=receive_len+len(data)
        print(receive_len)
        print(str(data,'utf-8'))
    
    client.close()
  • 相关阅读:
    百度编辑器 Ueditor使用记录
    JS实现继承的几种方式
    IOS 浏览器上设置overflow: auto 不可滚动
    throw new Error('Cyclic dependency' + nodeRep)
    如何理解springaop
    SQL连接的分类
    Eclipse创建Maven-Web项目及解决 jre版本和web.xml版本问题
    SQL的几种连接:内连接、左联接、右连接、全连接、交叉连接
    Centos7下面安装eclipse
    Centos7 下编译 Openjdk8
  • 原文地址:https://www.cnblogs.com/ybsport/p/12334708.html
Copyright © 2011-2022 走看看