Files
remote_like_teamview/被控端.py
2025-03-26 19:13:08 +08:00

67 lines
2.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 读取controlled.ini文件
import configparser
from loguru import logger
logger.add('controlled.log', rotation='1 MB', retention='7 days', level='DEBUG')
config = configparser.ConfigParser()
config.read('controlled.ini')
listen_ip = config.get('connection', 'listen_ip')
listen_port = int(config.get('connection', 'listen_port'))
password = config.get('connection', 'password')
# 模拟断开和等待连接状态
logger.info('断开状态')
logger.info('等待连接状态')
import socket
import selectors
# 创建一个默认的选择器对象
sel = selectors.DefaultSelector()
# 创建一个TCP套接字
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 设置套接字选项,允许地址重用
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
# 绑定到指定的IP地址和端口
server_socket.bind((listen_ip, listen_port))
# 开始监听允许的最大连接数为10
server_socket.listen(10)
logger.info(f'正在监听 {listen_ip}:{listen_port}')
# 将套接字设置为非阻塞模式
server_socket.setblocking(False)
# 注册服务器套接字到选择器,监听读事件
sel.register(server_socket, selectors.EVENT_READ, data=None)
while True:
# 等待事件发生
events = sel.select(timeout=None)
for key, mask in events:
if key.data is None:
# 如果是服务器套接字事件,意味着有新的连接
conn, addr = server_socket.accept()
logger.info(f'接受来自 {addr} 的连接')
conn.setblocking(False)
# 注册新连接的套接字到选择器,监听读事件
data = {'addr': addr}
sel.register(conn, selectors.EVENT_READ, data=data)
else:
# 如果是客户端套接字事件,意味着有数据可读
conn = key.fileobj
data = key.data
try:
# 接收数据
recv_data = conn.recv(1024)
if recv_data:
logger.debug(f'{data['addr']} 接收数据: {recv_data.decode()}')
else:
# 如果没有数据,意味着客户端关闭了连接
logger.info(f'关闭来自 {data['addr']} 的连接')
sel.unregister(conn)
conn.close()
except Exception as e:
# 处理异常,关闭连接
logger.error(f'处理来自 {data['addr']} 的连接时出错: {e}')
sel.unregister(conn)
conn.close()