"""
‘‘‘基于tcp实现ntp服务‘‘‘
import time
from socket import *
‘‘‘服务端‘‘‘
ip_port = (‘127.0.0.1‘, 8080)
buffer_size = 1024
back_log = 10
tcp_server = socket(AF_INET, SOCK_STREAM)
tcp_server.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
tcp_server.bind(ip_port)
tcp_server.listen(back_log)
while True:
conn, addr = tcp_server.accept()
while True:
try:
data = conn.recv(buffer_size) # 此处data为编码后形式的数据
# print(‘客户端发送的消息:‘, data.decode(‘utf-8‘))
back_time = time.strftime(data.decode(‘utf-8‘)) # 需要对data进行解码变成字符串
conn.send(back_time.encode(‘utf-8‘)) # back_time为字符串形式,发送数据需要进行编码
except Exception:
break
conn.close()
tcp_server.close()‘‘‘
"""
"""
‘‘‘基于tcp实现ntp服务‘‘‘
from socket import *
‘‘‘客户端‘‘‘
ip_port = (‘127.0.0.1‘, 8080)
buffer_size = 1024
tcp_client = socket(AF_INET, SOCK_STREAM)
tcp_client.connect(ip_port)
while True:
msg = input(‘请输入:‘).strip()
if not msg: continue
tcp_client.send(msg.encode(‘utf-8‘))
data = tcp_client.recv(buffer_size)
print(‘服务端发送的消息:‘, data.decode(‘utf-8‘))
tcp_client.colse()
"""
‘‘‘基于tcp实现远程执行命令‘‘‘
import subprocess
from socket import *
‘‘‘服务端‘‘‘
ip_port = (‘127.0.0.1‘, 8000)
back_log = 10
buffer_size = 1024
tcp_server = socket(AF_INET, SOCK_STREAM)
tcp_server.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
tcp_server.bind(ip_port)
tcp_server.listen(back_log)
while True:
conn, addr = tcp_server.accept()
while True:
try: # 当客户端点击左下方stop按钮终止链接会报出异常,所以加入try防止程序崩溃
data = conn.recv(buffer_size)
print(‘客户端发送的消息:‘, data.decode(‘utf-8‘))
if not data: break # 当客户端输入quit断开链接时,不加此判断会进入死循环
res = subprocess.Popen(data.decode(‘utf-8‘),
shell=True,
stdout=subprocess.PIPE,
stdin=subprocess.PIPE,
stderr=subprocess.PIPE,)
# subprocess库中Popen是一个类,能对命令进行执行;stdout是输出信息(命令正确),stderr是错误信息(命令错误),把这些信息放入管道,
# 然后再通过管道进行拿取;在终端执行不放入管道的话,那么输出信息是直接给了屏幕,而屏幕也是一个程序;
cmd_res = res.stdout.read() # 在管道中读取信息
if cmd_res:
conn.send(cmd_res)
else:
conn.send(res.stderr.read())
except Exception:
break
conn.close()
tcp_server.close()
‘‘‘基于tcp实现远程执行命令‘‘‘
from socket import *
‘‘‘客户端‘‘‘
ip_port = (‘127.0.0.1‘, 8000)
buffer_size = 1024
tcp_client = socket(AF_INET, SOCK_STREAM)
tcp_client.connect(ip_port)
while True:
msg = input(‘请输入:‘).strip() # 当获得的信息量比较多时,一次性展示不完,然后后续输入任何信息都可以再次展示其它未展示信息,不知道为什么
if not msg: continue
if msg == ‘quit‘: break
tcp_client.send(msg.encode(‘utf-8‘))
data = tcp_client.recv(buffer_size)
print(‘执行命令结果:‘, data.decode(‘gbk‘))
tcp_client.close()
原文:https://www.cnblogs.com/xuewei95/p/14790979.html