首页 > 编程语言 > 详细

socket编程执行远程命令例子:_python

时间:2020-02-20 11:47:32      阅读:56      评论:0      收藏:0      [点我收藏+]

服务端:

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()

 

socket编程执行远程命令例子:_python

原文:https://www.cnblogs.com/chenxiaozan/p/12334644.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!