第67天python学习基于tcp实例化实现远程执行命令

使用管道实现2个程序之间通信:例如:QQ  和微信通信

服务端:

from socket import *
import subprocess #管道模块,不同程序之间通信
ip_port="127.0.0.1",8080
back_log=5
buffer_size=1024

tcp_server=socket(AF_INET,SOCK_STREAM)
tcp_server.bind(ip_port)
tcp_server.listen(5)
while True:
conn,addr=tcp_server.accept()
print("新客户端链接",addr)
while True:
try:
cnd=conn.recv(buffer_size)
if not cnd :break
print("收到客户端的命令",cnd)

#执行命令得到运行cnd_res
res=subprocess.Popen(cnd.decode("utf-8"),shell=True, #把信息封装到管道里面
stderr=subprocess.PIPE, #把错误的信息搞到官道里面
stdin=subprocess.PIPE,
stdout=subprocess.PIPE)
err=res.stderr.read()
if err:
cnd_res=err
else:
cnd_res=res.stdout.read() ##把运行正确的信息从官道里面读出来

#把正确运行好的命令发给客户端
conn.send(cnd_res)
except Exception as e:
print(e)
break
conn.close()

客户端:

from socket import *
ip_port="127.0.0.1",8080
back_log=5
buffer_size=1024

tcp_clint=socket(AF_INET,SOCK_STREAM)
tcp_clint.connect(ip_port)
while True:
cnd=input(">>>:").strip()
if not cnd:continue #不能是空
if cnd=="quit":continue #按退出,允许退出
tcp_clint.send(cnd.encode("utf-8"))
cnd_res=tcp_clint.recv(buffer_size)
print("命令的执行结果是:",cnd_res.decode("gbk"))#服务器发送过来没有指定编码所有使用的是系统编码,Windows默认编码是gbk
tcp_clint.close()

 

posted on 2019-11-17 09:50  坚持是多么伟大的事情  阅读(165)  评论(0编辑  收藏  举报