python实现TCP服务端持续接收关机、重启指令并输出结果【系列三】
更新:2025-03-08 21:25:10
人气:57
来源:本站原创
A+
python制作一个TCP服务端,可以持续接收指令并输出接收的指令和接收时间。实现远程对计算机电脑进行关机、重启等操作。
以下是一个使用 Python 编写的 TCP 服务端程序,它可以持续接收客户端发送的指令,并输出接收到的指令和接收时间。通过接收指令后进行关机、重启、打开记事本等操作,关机和重启前要进行提示确认,默认10秒不操作将继续执行。
import socket
import datetime
import subprocess
import tkinter as tk
from tkinter import messagebox
'''
注释内容-BEGIN
python生成exe的必要插件
pip install pyinstaller
.py生成exe文件,不要运行窗口,独立一个文件exe
通过cmd命令行进入到1.py的目录,运行如下命令
pyinstaller --noconsole --onefile 1.py
注释内容-END
'''
#(李雷博客原创:https://www.mdaima.com)
# 定义服务器的主机和端口
PORT = 65432 # 监听的端口
# 获取本机主机名
hostname = socket.gethostname()
# 根据主机名获取 IP 地址
HOST = socket.gethostbyname(hostname)
# 创建一个 TCP 套接字
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
# 绑定主机和端口
s.bind((HOST, PORT))
# 开始监听连接,最大连接数为 1
s.listen(100)
#输出启动信息
print(f'Server is listening on {HOST}:{PORT}')
#关机事件
def perform_shutdown():
try:
# 执行关机命令(适用于 Windows 系统)
subprocess.run(["shutdown", "/s", "/t", "0"])
# Linux 系统,关机命令 subprocess.run(["shutdown", "-h", "now"]);
except Exception as e:
print(f"关机失败: {e}")
#重启事件
def perform_restart():
try:
# 执行重启命令(适用于 Windows 系统)
subprocess.run(["shutdown", "/r", "/t", "0"])
# Linux 系统,重启命令 subprocess.run(["shutdown", "-r", "now"]);
except Exception as e:
print(f"重启失败: {e}")
while True:
# 接受客户端连接
conn, addr = s.accept()
with conn:
#输出连接信息
print(f'Connected by {addr}')
while True:
# 接收客户端发送的数据,最大接收 1024 字节
data = conn.recv(1024)
if not data:
# 如果没有数据,退出内层循环
break
# 获取当前时间
current_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
# 解码接收到的数据
command = data.decode('utf-8')
# 输出接收到的指令和接收时间
#print(f'Received command: {command} at {current_time}')
#打开计算器
if command == "notepad":
subprocess.Popen('notepad.exe')
back_msg='action_end'
conn.sendall(back_msg.encode('utf-8'))
#关机
elif command.lower() == "close":
# 创建一个 Tkinter 根窗口
root = tk.Tk()
root.withdraw() # 隐藏主窗口
# 设置 10 秒后的关机定时器
timer_id = root.after(10000, perform_shutdown)
# 弹出确认对话框
result = messagebox.askyesno("确认关机?", "是否确认关机?如无操作,10秒后将自动关机!")
if result:
root.after_cancel(timer_id) # 取消定时器
perform_shutdown()
elif not result:
root.after_cancel(timer_id) # 取消定时器
#print("用户取消了关机操作")
back_msg='action_end'
conn.sendall(back_msg.encode('utf-8'))
#重启
elif command.lower() == 'restart':
# 创建一个 Tkinter 根窗口
root = tk.Tk()
root.withdraw() # 隐藏主窗口
# 设置 10 秒后的重启定时器
timer_id = root.after(10000, perform_restart)
# 弹出确认对话框
result = messagebox.askyesno("确认重启?", "是否确认重启?如无操作,10秒后将自动重启!")
if result:
root.after_cancel(timer_id) # 取消定时器
perform_restart()
elif not result:
root.after_cancel(timer_id) # 取消定时器
#print("用户取消了重启操作")
back_msg='action_end'
conn.sendall(back_msg.encode('utf-8'))
#其他
else:
# 将消息编码并发送给客户端
response = f"message: {command} , time: {current_time}"
conn.sendall(response.encode('utf-8'))
运行步骤:
保存上述代码为一个 Python 文件,例如 tcp_server.py。
打开终端,进入该文件所在的目录。
运行命令 python tcp_server.py 启动服务器。
使用 TCP 客户端连接到服务器,并发送指令。服务器将持续接收指令,并输出接收到的指令和接收时间。
推荐的文章
随手记
- ● 自制(IP或域名)可信任的SSL证书,适用360、chrome等浏览器
- ● windows系统下php无法使用curl怎么办?
- ● 绿联UGREENKVM切换器(分屏器)快捷键丢失解决办法
- ● 统信UOS开机指定网址全屏启动自带浏览器以及屏蔽ALT+F4关闭
- ● xshellSSH连接Linux服务器防止超时退出
- ● php8开启OpenSSL扩展库报错disabledinstallext
- ● 统信系统linux安装php时的报错libxml-2.0>=2.7.6
- ● tidb关闭sql_mode=ONLY_FULL_GROUP_BY模式
- ● windows10如何开机自动运行bat文件
- ● Win10Mysql8初始密码丢失,初始化又不显示密码
PHP经验分享